Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एंटिटी फ्रेमवर्क - वन-टू-वन - रेफरेंशियल कॉन्स्ट्रेन्ट को स्टोर-जनरेटेड कॉलम में मैप किया जाता है

परंपरा के अनुसार 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();



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ASP.NET सदस्यता डेटाबेस को SQL Azure में माइग्रेट करना

  2. SQL में डेटटाइम फ़ील्ड का समय भाग

  3. SQL सर्वर संग्रहीत कार्यविधि वापसी कोड विषमता

  4. वितरित डेटाबेस लेनदेन बनाम क्रॉस डेटाबेस लेनदेन

  5. स्ट्रिंग एसक्यूएल सर्वर से नंबर निकालें