Голямо предупреждение:НЕ ТЕСТВАНО - просто мисля на глас.
EF поддържа отмяна на SaveChanges
, така че може би една от опциите е да дефинирате интерфейс като:
interface IVersionedRow {
int RowVersion {get;set;}
}
и добавете int RowVersion
свойство/поле както към вашия клас(и) на модела, така и към таблицата(ите) на базата данни и използвайте partial class
за прилагане на този интерфейс (използвайки имплицитно изпълнение на интерфейса):
partial class Customer : IVersionedRow {}
partial class Order : IVersionedRow {}
...
След това заменете SaveChanges
, нещо като:
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);
}
който след това трябва да функционира (на теория - нетестван) като ръчно внедрен брояч на версии на ред. Оставете валидирането на промените активирано за RowVersion
, и това трябва да служи.