5

अगर मैं एक User वर्ग इन गुण है कि है:एफई कोड सबसे पहले, एक ही वस्तु प्रकार के लिए नक्शे दो नेविगेशन गुण

public Guid UserPreferenceId { get; set; } 
    public virtual DefaultUserPreference UserPreference { get; set; } 

    public Guid SecondaryUserPreferenceId { get; set; } 
    public virtual DefaultUserPreference SecondaryUserPreference { get; set; } 

मैं इस धाराप्रवाह एपीआई के माध्यम से बनाने के लिए मिल सकता है? जब मैं इसे चलाने की कोशिश करता हूं तो यह कहता है:

तालिका 'उपयोगकर्ताओं' पर विदेशी कुंजी बाधा पेश करना चक्र या एकाधिक कैस्केड पथ का कारण बन सकता है। किसी भी कार्रवाई को हटाएं या अद्यतन पर कोई क्रिया निर्दिष्ट करें, या अन्य विदेशी कुंजी बाधाओं को संशोधित करें। बाधा उत्पन्न नहीं कर सका। पिछली त्रुटियां देखें।

मैंने इन प्रश्नों में से कुछ को देखा है लेकिन वे हमेशा एक एकल नेविगेशन संपत्ति और एक संग्रह शामिल करते हैं। इसके अलावा रिश्ते unidirectional है, लेकिन अगर यह होना चाहिए, तो यह द्विपक्षीय हो सकता है, यह सुनिश्चित नहीं है कि यह मायने रखता है।

उत्तर

5

इकाई फ्रेमवर्क डिफ़ॉल्ट रूप से कैस्केड हटाएं के साथ संबंध बनाता है। एक इकाई से दूसरे प्रकार के दो रिश्ते बनाने के लिए दो कैस्केड-डिलीट रिलेशनशिप बनाने की कोशिश की जाती है, जो डेटाबेस आपके द्वारा देखी गई त्रुटि को फेंक देगा।

उपयोग कोड-प्रथम Fluent विन्यास को दूर करने के कास्केड एक या दोनों के रिश्तों की पर हटाएँ:

modelBuilder.Entity<User>() 
    .HasOptional(u => u.UserPreference) 
    .WithMany() 
    .WillCascadeOnDelete(false); 
modelBuilder.Entity<User>() 
    .HasOptional(u => u.SecondaryUserPreference) 
    .WithMany() 
    .WillCascadeOnDelete(false); 
+0

ठीक है तो मैं इसे फिर द्विदिश बनाने के लिए है? – SventoryMang

+0

नहीं, उत्तर के साथ उत्तर अद्यतन किया जो द्वि-दिशात्मक के बिना काम करता है। आप जो चाहते हैं उसके लिए उपयुक्त होने के लिए आपको केवल फ्लेंट कॉन्फ़िगरेशन लाइन को बदलने की आवश्यकता है। – Richard

+0

इसका कारण यह हुआ: गुण 'DefaultUser_DefaultUserPreference_Target' में 'DefaultUser_DefaultUserPreference' भूमिका में रेफरेंसियल बाधा के साथ बहुविकल्पीय विवाद। क्योंकि निर्भर भूमिका में सभी गुण गैर-शून्य हैं, प्रिंसिपल रोल की बहुतायत '1' होना चाहिए। जब मैंने इसे द्विपक्षीय बना दिया तो यह "काम" (त्रुटि नहीं फेंक दिया) लेकिन माध्यमिक यूज़र प्रीफरेंस आईडी को एफके कुंजी पर सेट नहीं किया गया था। – SventoryMang

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