बड़ी चेतावनी:परीक्षण नहीं किया गया - बस ज़ोर से सोच रहा हूँ।
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
. के लिए परिवर्तन-सत्यापन सक्षम रहने दें , और यह काम करना चाहिए।