Lưu ý lớn: KHÔNG ĐƯỢC KIỂM TRA - chỉ cần suy nghĩ lớn tiếng.
EF hỗ trợ ghi đè SaveChanges
, vì vậy có lẽ một tùy chọn là xác định một giao diện chẳng hạn như:
interface IVersionedRow {
int RowVersion {get;set;}
}
và thêm một int RowVersion
thuộc tính / trường cho cả (các) lớp mô hình của bạn và (các) bảng cơ sở dữ liệu và sử dụng partial class
để triển khai giao diện này (sử dụng triển khai giao diện ngầm định):
partial class Customer : IVersionedRow {}
partial class Order : IVersionedRow {}
...
Sau đó ghi đè SaveChanges
, một cái gì đó như:
public override int SaveChanges(SaveOptions options)
{
foreach (ObjectStateEntry entry in
ObjectStateManager.GetObjectStateEntries(EntityState.Modified))
{
var v = entry.Entity as IVersionedRow;
if(v != null) v.RowVersion++;
}
return base.SaveChanges(options);
}
sau đó sẽ hoạt động (về lý thuyết - chưa được kiểm tra) như một bộ đếm phiên bản hàng được triển khai thủ công. Bật xác thực thay đổi cho RowVersion
và điều đó sẽ phục vụ.