thảo luận [.NET] Topic thảo luận các vấn đề xoay quanh .Net

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 ạ
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?
 
Mình mới code async/await Task của C#.
Anh em cho hỏi, mình dùng Timer để count down rồi đúng thời gian là xuất file,
Nó đã làm việc ngon, nhưng đoạn khi lọt vào Exception,
Không hiểu sao nó bị lặp vô tận, kiểu như không dừng lại, Mình thấy có nhiều người gặp với từ khóa "task exception was never retrieved"mà chưa tìm được cách giải quyết, có anh em nào rành chỉ mình,

1.JPG

2.JPG

3.JPG
 
Mình đang dùng Google Places Autocomplete để lưu địa chỉ khách hàng. Sau đó, bắn địa chỉ này sang GHN Express để tính phí ship. Vấn đề là thằng GHN có ID phường xã, quận huyện riêng. Vậy, làm sao để mapping info từ Google Places sang hệ thống ID của GHN nhỉ...?
 
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ý ạ
 
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ỉ.?
 
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ỉ.?
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
 
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
Nghe giống cơ chế MVCC có sẵn của db.
 
Cá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.
 
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ý ạ
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ở
 
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ở
Thì 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
 
Thì 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
Đú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 :love:
 
Đú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 :love:
// 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
 
// 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
Thanks bác:love: Em éo có nút react nên phải reply kk
 
Back
Top