कृपया मुझे बताओ अगर यह प्राप्त करते समय यह मैं आईडी होना दी बिना एक इकाई को हटाने के लिए एक सभ्य तरीका है।इकाई की रूपरेखा कोड पहले हटा कर आईडी ला रहा है बिना (जेनेरिक शैली)
public void Delete<TEntity>(TEntity entity) where TEntity : class, IEntity, new()
{
var obj = Ctx.Entry(entity);
if (obj.State == System.Data.EntityState.Detached)
{
Ctx.Set(typeof(TEntity)).Attach(obj.Entity);
}
Ctx.Set(typeof(TEntity)).Remove(obj.Entity);
}
:
public interface IStore : IReadOnlyStore
{
void Delete<TEntity>(TEntity entity) where TEntity : class, IEntity, new();
void SaveChanges();
}
और वह इंटरफेस के ठोस स्टोर कक्षा में, यहाँ मेरी हटाने विधि है:
मैं (मैं केवल हटाएं दिखाता हूँ) निम्नलिखित इंटरफेस के साथ एक सामान्य दुकान
Store.Delete(new Foo() { Id = request.Entity.Id });
के साथ-साथ एक इकाई को लाते समय और उसके बाद कल्ली:
मैं दोनों Newing ऊपर एक इकाई का परीक्षण किया है एनजी हटाएं।
डिबगिंग के माध्यम से, मैं वांछित है दोनों परिदृश्यों पर प्रभावित करते हैं।
मैं सिर्फ यकीन है कि यह एक अच्छा डिजाइन है और वहाँ इस दृष्टिकोण के लिए कोई साइड इफेक्ट हैं कि बनाना चाहते हैं।
संदर्भ के लिए, ctx सिर्फ DbContext ही है।
धन्यवाद।
yoru प्रतिक्रिया के लिए धन्यवाद। मैंने आपके सुझाव की कोशिश की, लेकिन यह मेरे यूनिट परीक्षणों में से 50% से अधिक की मौत हो गई। सामान्य त्रुटि प्रतीत होती है: उन इकाइयों को सहेजते समय एक त्रुटि हुई जो उनके रिश्तों के लिए विदेशी कुंजी गुणों का खुलासा नहीं करती है। EntityEntries प्रॉपर्टी शून्य वापस आ जाएगी क्योंकि एक इकाई को अपवाद के स्रोत के रूप में पहचाना नहीं जा सकता है। बचत के दौरान अपवादों को संभालना आपके इकाई प्रकारों में विदेशी कुंजी गुणों को उजागर करके आसान बना दिया जा सकता है। – Forest
विवरण के लिए InnerException देखें। ---> System.Data.UpdateException: 'Foo_Siblings' एसोसिएशनसेट से एक रिश्ते 'हटाए गए' राज्य में है। बहुगुणित बाधाओं को देखते हुए, 'हटाए गए' राज्य में एक संबंधित 'Foo_Siblings_Target' भी होना चाहिए। – Forest