longvungoc
Junior Member
tks bác ạlên overleaf 1 rổ bác![]()
tks bác ạlên overleaf 1 rổ bác![]()
hình như dùng transaction của entity framework cũng được nhỉ. đảm bảo tính toàn vẹn,nhất quán dữ liệu đúng không?mn ơi cho em hỏi ví dụ như website có chức năng xử lý nhiều người mua hàng cùng lúc (nhiều người mua nhưng kho số lượng có hạn) thì mn gợi ý giúp em keyword để xử lý trường hợp này với cách để test chức năng chạy đồng thời như thế nào ạ
khi thanh toán check out thì phải lock db lại nữahình như dùng transaction của entity framework cũng được nhỉ. đảm bảo tính toàn vẹn,nhất quán dữ liệu đúng không?
cái đó tùy logic của người viết thôi. tùy logic của chương trìnhkhi thanh toán check out thì phải lock db lại nữa
Context như nào nhỉ.Dùng redis để handle Concurrency Conflicts được ko các bác, kiểu nhiều user cùng cập nhật 1 row vào 1 thời điểm. Vì redis là single thread nên mình sẽ chặn lại từ khi check redis thì có ổn ko các bác nhỉ.?
Nghe giống cơ chế MVCC có sẵn của db.Context như nào nhỉ.
Mới microservice thì mình ko dám chém, với monolith thì mình đã làm như sau: thêm cột version vào tất cả các bảng, mỗi lần update sẽ nâng version ấy lên. Sau đó sửa base cho hàm update là nếu version đang giữ khác trong db thì throw lỗi (hoặc retry nếu muốn)
Đấy là cách mình đã từng làm. Đặt trong context của microsevice chắc phức tạp hơn nhiều
Thanks thím vì từ khoá hay. Thời điểm ấy team mình ko có ai master db. Toàn crud. Đến giờ db mình vẫn gàNghe giống cơ chế MVCC có sẵn của db.
Tìm sách của Adam Freeman ấyCác bác cho em xin recommend đầu sách chuyên về .net core web api với ạ.
Lúc em search thì thấy khá nhiều sách lan man. em chỉ muốn chuyên sâu về web api back end.
Bác có ý tưởng chưa cho em xin với, em cũng bị dính vụ như này vì em hay làm kiểu 1 bảng cha có 1 bảng details nữa, transaction nhiều mà gọi savechange trước cho thằng cha thì ngộ nhỡ thằng con có lỗi nó không savechange thì lại dởmọi ng cho e hỏi. e dùng lệnh saveChangeAsync() 1 lần nhưng trước đấy update rất nhiều. thế viết transaction như nào cho hợp lý ạ
Thì bác update hết xong xuôi, hết r mới gọi await dbContext.SaveChangesAsync();Bác có ý tưởng chưa cho em xin với, em cũng bị dính vụ như này vì em hay làm kiểu 1 bảng cha có 1 bảng details nữa, transaction nhiều mà gọi savechange trước cho thằng cha thì ngộ nhỡ thằng con có lỗi nó không savechange thì lại dở
Đúng là em đang làm như bác nói, SaveChangesAsync() 1 lần thôi, để em tìm hiểu cái DbTransaction. Thanks bácThì bác update hết xong xuôi, hết r mới gọi await dbContext.SaveChangesAsync();
=> nếu xuất hiện lỗi sẽ cancel việc lưu xuống db từ đầu đến cuối trở về trạng thái lúc trước gọi method
Hoặc bác tạo DbTransaction mà quất thôi
// create dbTransaction to save into DbĐúng là em đang làm như bác nói, SaveChangesAsync() 1 lần thôi, để em tìm hiểu cái DbTransaction. Thanks bác![]()
Thanks bác// create dbTransaction to save into Db
var strategy = dbContext.Database.CreateExecutionStrategy();
await strategy.ExecuteAsync(async () => {
using var transaction = dbContext.Database.BeginTransaction();
try {
// write ur code here
await dbContext.SaveChangesAsync();
await transaction.CommitAsync();
} catch (Exception) {
transaction.Rollback();
throw;
}
});
hôm trước mình đang onl đt nên k copy code mẫu đc :v
savechangeasync có thể coi như là transaction rồi, ko cần phải sài transaction là gìĐúng là em đang làm như bác nói, SaveChangesAsync() 1 lần thôi, để em tìm hiểu cái DbTransaction. Thanks bác![]()