परंपरा के अनुसार EF6 तथाकथित साझा प्राथमिक कुंजी संघ , जहां आश्रित इकाई का PK प्रमुख इकाई के लिए FK के रूप में भी कार्य करता है।
आपके मामले में, यह Account.Id
. पर विचार करता है Customer
. के लिए FK बनने के लिए , और चूंकि यह स्वतः उत्पन्न होता है, इसलिए आपको विचाराधीन अपवाद मिलता है।
अतिरिक्त समस्या यह है कि EF6 स्पष्ट FK संपत्ति के साथ एक-से-एक संबंध का समर्थन नहीं करता है (कोई HasForeignKey
नहीं है। धाराप्रवाह एपीआई एक-से-कई संबंधों के समान)।
तो आपको AccountId
को हटाना होगा मॉडल से संपत्ति और केवल नेविगेशन संपत्ति छोड़ दें। साथ ही, हालांकि यह अत्यधिक आवश्यक नहीं है, नामकरण परंपराओं का पालन करना और इसे केवल Account
कहना अच्छा होगा। के बजाय AccountValue
.
दूसरे शब्दों में, बदलें
[Column("CUSTOMER_ID")]
public int? CustomerId { get; set; }
public virtual Customer CustomerValue { get; set; }
के साथ
public virtual Customer Customer { get; set; }
FK कॉलम का नाम MapKey
. का उपयोग करके निर्दिष्ट किया जा सकता है धाराप्रवाह एपीआई:
modelBuilder.Entity<Customer>()
.HasRequired(c => c.Account)
.WithRequiredPrincipal(a => a.Customer)
.Map(m => m.MapKey("CUSTOMER_ID")); // <--
और आपका काम हो गया।
अब निम्नलिखित सही ढंग से पहले एक नया Customer
सम्मिलित करता है और फिर एक नया Account
इसका संदर्भ देना:
var account = new Account
{
AccountNumber = "00123456",
Customer = new Customer { FirstName = "Joe" }
};
db.Accounts.Add(account);
db.SaveChanges();