के साथ इकाई हटाने को ओवरराइड करना मैं DbContext.SaveChanges()
विधि को ओवरराइड करके और मेरे ISoftDelete
इंटरफ़ेस को लागू करने वाली किसी भी संस्था को हटाने से पूर्ववत करके अपने प्रोजेक्ट में सॉफ्ट सॉफ्ट डिलीवरी सुविधा को कार्यान्वित करने का प्रयास कर रहा हूं।एसोसिएशन
interface ISoftDelete
{
bool IsDeleted { get; set; }
}
SaveChanges()
विधि मैं हर प्रविष्टि 'हटाया गया' अवस्था में है और ISoftDelete
लागू करता है कि के लिए मेरे SoftDelete() विधि बोल रहा हूँ में:। इस प्रकार
var entries = this.ChangeTracker.Entries().Where(x => (x.State == EntityState.Deleted) && x.Entity is ISoftDelete)
.ToList();
entries.ForEach(SoftDelete);
मेरे SoftDelete()
विधि है:
private void SoftDelete(DbEntityEntry entry)
{
if (entry.State == EntityState.Deleted && entry.Entity is ISoftDelete)
{
entry.Reload();
var entity = (ISoftDelete)entry.Entity;
entity.IsDeleted = true;
entry.State = EntityState.Modified;
}
}
यह पूरी तरह से काम करेगा जब तक कि मैं एक ऐसी इकाई में भाग नहीं लेता जिसके पास किसी और के साथ एक से एक संबंध है।
{"A relationship from the 'ChildParent' AssociationSet is in the 'Deleted' state. Given multiplicity constraints, a corresponding 'Parent' must also in the 'Deleted' state."}
वहाँ एक तरीका है कि इकाई के लिए सभी संघों हो और साथ ही उनके लिए नष्ट कर दिया राज्य को बदलने के लिए है: जो बिंदु पर, एक अपवाद इस त्रुटि के साथ फेंक दिया जाता है?
मैंने पहले से ही वास्तविक संबद्ध इकाई का संदर्भ प्राप्त करने का प्रयास किया है लेकिन इकाई का EntityState
Deleted
के बजाय Unchanged
पर सेट है।
मुझे लगता है कि एसोसिएशन को स्वयं हटाए जाने के रूप में चिह्नित किया जा रहा है (एसोसिएशन को ईएफ में अलग-अलग वस्तुओं के रूप में माना जाता है) लेकिन संबंधित इकाई नहीं। अब जब ईएफ एसोसिएशन को हटाने की कोशिश करता है तो ऐसा नहीं हो सकता क्योंकि संबंधित इकाई हटाए जाने के लिए चिह्नित नहीं है। मुझे लगता है कि विदेशी कुंजी शून्य नहीं है और इसलिए किसी इकाई को हटाने के लिए संबंधित इकाई को हटाने की आवश्यकता है (कैस्केड डिलीट)। आप इस धागे को देख सकते हैं: http://stackoverflow.com/questions/10300156/ivalidatableobject-is-useless-for-ef-navigation-properties/10304323#10304323। यह सहायक हो सकता है क्योंकि यह दिखाता है कि संबंधित वस्तुओं को कैसे प्राप्त किया जाए। – Pawel
संबंधित वस्तुओं को प्राप्त करने में यह सहायक था, धन्यवाद। हालांकि, रिश्तों में से किसी एक की स्थिति को बदलने की कोशिश करते समय, मुझे एक अजीब त्रुटि मिलती है जो कहती है, "रिश्ते के सिरों में से एक एक कुंजी है," रिश्ते की स्थिति को बदल नहीं सकता है। – Jonathan
क्या आपने [यह कामकाज] देखा है (http://connect.microsoft.com/VisualStudio/feedback/details/513174/unable-to-refresh-some-items-in-the-objectcontext)? –