6

मैं ईएफ में एक-से-एक एसोसिएशन प्राप्त करने के लिए foreign key association दृष्टिकोण का उपयोग करने का प्रयास कर रहा हूं। मेरे मामले में उपयोगकर्ता और टीम के बीच एक संबंध है, और मुझे उनमें से प्रत्येक में एक नेविगेशन संपत्ति की आवश्यकता है। डेटा बचाने के लिए प्रयास करते समय मैंने एक समस्या में उछाल दिया।एंटिटी फ्रेमवर्क एक-से-एक संगठनों में डेटा सहेजना

यह वह जगह है मॉडल कैसे दिखाई देते हैं:

public class Team 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public int OwnerID { get; set; } 
    public virtual User Owner { get; set; } 
} 

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

    public int TeamID { get; set; } 
    public virtual Team Team { get; set; } 
} 

मैं के रूप में ब्लॉग पोस्ट ऊपर संदर्भित में निर्देश दिए, DbContextOnModelCreating() करने के लिए इन बिट्स कहा:

modelBuilder.Entity<User>() 
    .HasRequired(u => u.Team) 
    .WithMany() 
    .HasForeignKey(u => u.TeamID); 

modelBuilder.Entity<Team>() 
    .HasRequired(t => t.Owner) 
    .WithMany() 
    .HasForeignKey(t => t.OwnerID) 
    .WillCascadeOnDelete(false); 

और अब जब जैसा डेटा जोड़कर यह:

User u = new User(); 
u.UserName = "farinha"; 
Team t = new Team("Flour Power"); 
u.Team = t; 
t.Owner = u; 
context.Users.Add(u); 
context.Teams.Add(t); 
context.SaveChanges(); 

या यहां तक ​​कि इस तरह:

User u = new User(); 
u.UserName = "farinha"; 
u.Team = new Team("Flour Power"); 
context.Users.Add(u); 
context.SaveChanges(); 

मैं निम्न त्रुटि हो रही है:

Unable to determine a valid ordering for dependent operations. Dependencies may exist due to foreign key constraints, model requirements, or store-generated values.

यह कैसे हल करने के लिए के किसी भी विचार? क्या मैं डेटा को गलत तरीके से सहेज रहा हूं?

अग्रिम

उत्तर

8

आप डेटा गलत तरीके से बचत नहीं कर रहे हैं, लेकिन यह सिर्फ इसलिए क्योंकि आप द्विदिश निर्भरता परिभाषित काम नहीं कर सकता धन्यवाद। टीम केवल तभी सहेजी जा सकती है जब पहले से सहेजे गए उपयोगकर्ता से संबंधित हो और उपयोगकर्ता केवल मौजूदा टीम से संबंधित ही सहेजा जा सके। आप बनाना चाहिए एक संबंध (User में उदाहरण TeamId के लिए) विदेशी कुंजी संपत्ति नल चिह्नित करके वैकल्पिक:

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

    public int? TeamID { get; set; } 
    public virtual Team Team { get; set; } 
} 

तो फिर तुम User इकाई पहले सहेजना चाहिए और फिर आप Team बचा सकता है।

User u = new User(); 
u.UserName = "farinha"; 
context.Users.Add(u); 
context.SaveChanges(); 

u.Team = new Team { Name = "Flour Power", OwnerID = u.ID }; 
context.SaveChanges(); 
+0

@ ladislav-mrnka जो त्रुटि को 'शून्य' कॉलम 'टीमआईडी', तालिका 'DeuceHigh.dbo.User' में परिवर्तित नहीं कर सकता है; कॉलम नल की अनुमति नहीं देता है। INSERT विफल रहता है। कथन समाप्त कर दिया गया है। – Farinha

+1

@ फ़ारन्हा जब से आप मॉडल बदल गए, क्या आपने डेटाबेस तालिका भी अपडेट की है? – DDiVita

+0

@ फ़ारन्हा: यह डेटाबेस स्तर त्रुटि है जिसका अर्थ है कि उपयोगकर्ता तालिका में टीमआईडी अभी भी शून्य नहीं है। आपने डेटाबेस को फिर से बनाया या संशोधित नहीं किया है। –

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