मेरा मॉडल इस तरह दिखता है

public class User
{
    public int ID { get; set; }

    public string Name { get; set; }


    /*Users who are following current user*/
    public virtual ICollection<User> Followers { get; set; }

    /*Users whom current user is following*/
    public virtual ICollection<User> Following { get; set; }


    /*current user has ignored these users*/
    public virtual ICollection<User> Ignores { get; set; }

}

डेटा जोड़ने के लिए

        User john = new User { Name = "john" };
        User mary = new User { Name = "mary" };
        User david = new User { Name = "david" };

        john.Following = new List<User> { mary };
        mary.Followers = new List<User> { john};
        john.Ignores = new List<User> { david};

        context.Users.Add(john);
        context.Users.Add(mary);
        context.Users.Add(david);

        context.SaveChanges();

ऐसा करना त्रुटि दे रहा है:

आश्रित संचालन के लिए एक मान्य आदेश निर्धारित करने में असमर्थ। निर्भरताएं विदेशी कुंजी बाधाओं, मॉडल आवश्यकताओं, या स्टोर-जनित मूल्यों के कारण मौजूद हो सकती हैं।

अगर मैं User से Ignores की संपत्ति को हटा दूं तो यह आदर्श रूप से काम कर रहा है, लेकिन इसे अनदेखा करने पर ऐसा नहीं होता है।

मुझे लगता है कि कुछ मैपिंग करने की जरूरत है, कृपया मुझे सुझाव दें कि मैं यह कैसे कर सकता हूं !!

2
Rusi Nova 11 अगस्त 2011, 15:32

1 उत्तर

सबसे बढ़िया उत्तर

समस्या यह प्रतीत होती है कि ईएफ यह नहीं जानता कि कौन से दो अनेक-से-अनेक हैं और कौन-सा एक-से-अनेक है। आप सम्मेलन पर भरोसा करने के बजाय इन्हें स्पष्ट रूप से बताने का प्रयास कर सकते हैं। DbContext वर्ग की OnModelCreating(DbModelBuilder) विधि को ओवरराइड करने का प्रयास करें (यदि आप DbContext का उपयोग कर रहे हैं)।

protected override void OnModelCreating(DbModelBuilder mb)
{
    mb.Entity<User>()
        .HasMany(u => u.Ignores)
        .WithReequired()
        .HasForeignKey(u => u.ID);

    mb.Entity<User>()
        .HasMany(u => u.Followers)
        .WithMany(u => u.Following);
        // If you want to specify a table, use the following line:
        // .Map(m => m.ToTable("CustomManyToManyTableName");
}

सूचना: मैंने इसे अपने सिर के ऊपर से बनाया है, इसलिए मेरे सिंटैक्स और इस तरह के सटीक पर भरोसा न करें, लेकिन यह बहुत करीब होना चाहिए।

3
Alec 11 अगस्त 2011, 18:54
यह काम करता है, इस जवाब को स्वीकार करने से पहले मैं एक बात जानना चाहता हूं। ".withRequired ()" का उद्देश्य क्या है ??
 – 
Rusi Nova
11 अगस्त 2011, 20:38
आपको रिश्ते के दोनों पक्षों को EF देना होगा। चूँकि आपका एक-से-अनेक पक्ष स्पष्ट होने के बजाय निहित है, आप इसे खाली छोड़ देते हैं। साथ ही .HasForeignKey() कॉल WithRequired के परिणाम पर चलता है, मुझे लगता है। तो मूल रूप से आप कह रहे हैं कि आपका एक-से-अनेक संबंध है। कई पक्ष Ignores संपत्ति हैं और एक तरफ नेविगेशन संपत्ति नहीं है, बल्कि इसे विदेशी कुंजी ID द्वारा दर्शाया गया है।
 – 
Alec
12 अगस्त 2011, 18:37