2013-03-06 7 views
9

मैं कोड पहले और टीपीटी (तालिका प्रति प्रकार) विरासत के साथ ईएफ का उपयोग कर रहा हूं।कोड में पहले टीपीटी (तालिका प्रति प्रकार) विरासत में कैस्केड हटाने को कैसे सक्षम करें?

public partial class AccountHolder 
{ 
    public int AccountHolderId { get; set; } 

    public virtual Address Detail { get; set; } 
    public virtual Nominee Nominee { get; set; } 
} 

public partial class Nominee 
{ 
    public int NomineeId { get; set; }    
} 

public abstract class Address 
{ 
    public int AddressId { get; set; } 
    ... 
} 

public class PersonalDetail : Address 
{ 
    public int PersonalDetailId { get; set; } 
    ... 
} 

Fluent एपीआई:

 modelBuilder.Entity<AccountHolder>().HasOptional(p => p.Nominee) 
              .WithRequired() 
              .WillCascadeOnDelete(); 

this tutorial के अनुसार यहां खाताधारी और पता के बीच एक बहुरूपी संबंध है मैं निम्नलिखित मॉडल है। PersonalDetail पता विरासत। मेरा मुद्दा यह है कि जब भी मैं कोई खाताधारक हटा देता हूं, तो मैं चाहता हूं कि ईएफ अपनी संबंधित व्यक्तिगत जानकारी जानकारी को पता और व्यक्तिगत विवरण तालिका से हटाने का ख्याल रखेगी लेकिन वर्तमान में यह खुश नहीं है, क्या कोई मुझे कृपया मार्गदर्शन कर सकता है कि मैं इस व्यवहार को धाराप्रवाह एपीआई या किसी अन्य के माध्यम से कैसे कार्यान्वित कर सकता हूं दृष्टिकोण?

संपादित करें:

तैनात जवाब जब मैं इस विन्यास का उपयोग कर रहा के अनुसार:

 modelBuilder.Entity<AccountHolder>().HasOptional(p => p.Detail) 
              .WithRequired() 
              .WillCascadeOnDelete(); 

झरना हटाना है कि इस मौजूदा खाताधारी और नामित के बीच 1 से 1 संघ से जूझ रहा है सक्षम करने के लिए। अपवाद है:

विवादित परिवर्तनों का पता चला। यह एक ही कुंजी के साथ कई इकाइयों को सम्मिलित करने का प्रयास करते समय हो सकता है।

उत्तर

1

चेक बाहर WillCascadeOnDelete समारोह जब कि उदाहरण हैं कि विवादित पोस्ट में EntityTypeConfiguration

http://msdn.microsoft.com/en-us/library/gg679348(v=vs.103).aspx

निर्दिष्ट करते समय, वे हैं:

modelBuilder.Entity<Customer>() 
       .HasOptional(c => c.BillingAddress) 
       .WithRequired(); 

थप्पड़ एक WillCascadeOnDelete (सही) पर उस के अंत (या जो भी इकाई आप कोस्केड करना चाहते हैं), और इसे करना चाहिए। कुछ की तरह:

modelBuilder.Entity<AccountHolder>().HasOptional(a => a.Address).WithRequired().WillCascadeOnDelete(true); 
+0

मैं पहले से ही एक 1 1 के लिए 'खाताधारी और OtherTable' एक ही विन्यास जो आप ऐसा सुझाव दिया thats क्यों जब मैं विन्यास जो आप इसे से सुझाव द्वारा जोड़ा जा रहा के साथ के बीच संबंधों को मुझे एक अपवाद' विरोधी से पता चलता परिवर्तन पता चला। ऐसा तब हो सकता है जब एक ही कुंजी के साथ कई इकाइयों को सम्मिलित करने का प्रयास किया जा रहा है। 'मेरे प्रश्न में इसका उल्लेख न करने के लिए खेद है, मैं अपना प्रश्न अपडेट करता हूं। – gaurav

+0

अन्य लोगों ने टीपीटी विरासत के साथ-साथ इसमें भी भाग लिया है। Http://stackoverflow.com/questions/9064273/cascade-delete-in-entity-framework-table-per-type-inheritance देखें, ऐसा लगता है कि एक बग/फीचर है जो थोड़ा बालों को हटा देती है, लेकिन यह संभव है। इसके अलावा, प्रत्येक रिश्ते को कैस्केड करना चाहिए जिसे मैंने ऊपर पोस्ट किए गए उदाहरण की तरह कॉन्फ़िगर किया जाना चाहिए, बस यह सुनिश्चित करने के लिए कि वे जितना संभव हो सके (उस लिंक में समझा गया बग/फीचर के साथ) –

+0

या मैं पहले से ही जांच करता हूं यह पोस्ट लेकिन मेरे मामले में किसी भी तरह से व्यक्तिगत पेंट टेबल (व्युत्पन्न तालिका) से भी रिकॉर्ड नहीं हटा रहा है – gaurav

संबंधित मुद्दे