इकाई ढांचा कोड-पहली अशक्त विदेशी कुंजी


107

मेरे पास एक User< Countryमॉडल है। एक उपयोगकर्ता एक देश से संबंधित है, लेकिन किसी भी (विदेशी विदेशी कुंजी) से संबंधित नहीं हो सकता है।

मैं इसे कैसे सेट करूँ? जब मैं किसी उपयोगकर्ता को एक अशक्त देश के साथ सम्मिलित करने का प्रयास करता हूं, तो यह मुझे बताता है कि यह अशक्त नहीं हो सकता।

मॉडल इस प्रकार है:

 public class User{
    public int CountryId { get; set; }
    public Country Country { get; set; }
}

public class Country{
    public List<User> Users {get; set;}
    public int CountryId {get; set;}
}

त्रुटि: A foreign key value cannot be inserted because a corresponding primary key value does not exist. [ Foreign key constraint name = Country_Users ]"}


अगर मैं गलत हूं तो क्या आप मुझे सही कर सकते हैं? एक विदेशी कुंजी कोड में पहले asp.net mvc - 5 इकाई ढांचे में DEFAULT द्वारा पूर्ण नहीं है।
अटूट

1
अगर हम इसे गैर अशक्त बनाना चाहते हैं। हमें या तो धाराप्रवाह एपीआई का उपयोग करने की आवश्यकता है यदि नहीं तो "आवश्यक" विशेषता के साथ सजाने के लिए। क्या मैं सही हूँ?
अटूट

2
यदि हम ऐसा नहीं करते हैं, तो फॉरेन की को Nullable
Unbreakable

जवाबों:


165

आपको अपनी विदेशी कुंजी को अशक्त बनाना होगा:

public class User
{
    public int Id { get; set; }
    public int? CountryId { get; set; }
    public virtual Country Country { get; set; }
}

7
आभासी क्या करता है?
Shawn Mclean

32
आलसी लोडिंग के लिए वर्चुअल आवश्यक है।
लादिस्लाव मृका

2
वर्चुअल भी परिवर्तन ट्रैकिंग जोड़ता है, जो हमेशा नहीं चाहता है। केवल उस समय के बारे में जिसे हम कभी चाहते हैं कि आभासी संग्रह पर है, लेकिन YMMV।
दान वनविंकल

1
@TravisJ user.Country फिर अशक्त हो जाता है ... या तो अपवाद को पकड़ें (इष्टतम) या उपयोग if(eww)
SparK

7
इसके अलावा - यह Guidआधारित कुंजियों के लिए काम नहीं करता है । (यह उन्हें अशक्त बनाता है, सुनिश्चित करता है, लेकिन विदेशी कुंजी सेट करने के लिए विदेशी कुंजी सेट के साथ डेटाबेस में रिकॉर्ड को सहेजना स्वचालित रूप से उत्पन्न विदेशी कुंजी बाधा के कारण विफल रहता है।) :-(
BrainSlugs83

8

मैं इसे पसंद करता हूं (नीचे):

public class User
{
    public int Id { get; set; }
    public int? CountryId { get; set; }
    [ForeignKey("CountryId")]
    public virtual Country Country { get; set; }
}

क्योंकि EF डेटाबेस तालिका में 2 विदेशी कुंजियाँ बना रहा था: CountryId, और CountryId1, लेकिन ऊपर दिए गए कोड ने इसे ठीक कर दिया।


6

मुझे अब भी यही समस्या है, मेरे पास विदेशी कुंजी है और मुझे इसे अशक्त बनाने की आवश्यकता है, इस समस्या को हल करने के लिए जिसे आपको डाला जाना चाहिए

    modelBuilder.Entity<Country>()
        .HasMany(c => c.Users)
        .WithOptional(c => c.Country)
        .HasForeignKey(c => c.CountryId)
        .WillCascadeOnDelete(false);

DBContext क्लास में मुझे बहुत देर से जवाब देने का खेद है :)


3

मैं इस चित्र की तरह EF कोड फर्स्ट में रिलेशनशिप, नेविगेशन प्रॉपर्टीज और फॉरेन कीज के उपयोग के लिए Microsoft गाइड पढ़ने की सलाह देता हूं ।

यहां छवि विवरण दर्ज करें

नीचे दिए गए गाइड लिंक:

https://docs.microsoft.com/en-gb/ef/ef6/fundamentals/relationships?redirectedfrom=MSDN

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.