one to one - Entity Framework, code first using fluent API, avoid inserting in referenced table -


मेरे पास स्थिर डेटा के साथ सेवा प्रदाता नामक तालिका है पीओसीओ वर्ग निम्नानुसार है

  सार्वजनिक वर्ग सेवाप्रदाता {सार्वजनिक वर्चुअल इंट आईडी (प्राप्त करें; सेट; } सार्वजनिक वर्चुअल स्ट्रिंग Name {get; सेट; }}   

मेरे पास एक ग्राहक तालिका है I प्रत्येक ग्राहक को "मौजूदा" सेवा प्रदाताओं में से एक का संदर्भ होना चाहिए।

  सार्वजनिक वर्ग क्लाइंट {सार्वजनिक वर्चुअल इन्ट आईडी (get; सेट; } सार्वजनिक आभासी स्ट्रिंग प्रथम नाम {प्राप्त; सेट; } सार्वजनिक आभासी स्ट्रिंग LastName {get; सेट; } सार्वजनिक वर्चुअल सेवाप्रदाता सेवा प्रदाता {get; सेट; }}   

मैं ग्राहक को ईएफ कोड का उपयोग पहले धाराप्रवाह एपीआई के रूप में कर रहा हूं, जैसा कि

  सार्वजनिक क्लाइंट कॉन्फ़िगरेशन (): base () {HasKey (e = & gt) ; ई.आई.डी.); प्रॉपर्टी (ई = & gt; ई.आई.डी.) .हाडेटाबेस जनरेटेडओपेशन (डाटाबेस जनरेटेडओपेशन.आईडेंटीटी); ToTable ( "dbo.Clients"); प्रॉपर्टी (ई = & gt; ई.फस्ट_नाम)। आवश्यक है ()। हसमैक्सलेैम्थ (256) .IsVariableLength ()। HasColumnType ("nvarchar"); प्रॉपर्टी (ई = & gt; ई.लिस्टएनैम)। आवश्यक है ()। हसमैक्सलेैम्थ (256) .IsVariableLength ()। HasColumnType ("nvarchar"); HasRequired (e = & gt; ई। सेवाप्रदाता) .बहुत ()। मैप (एम = & gt; एम। मैमके ("सर्विसप्रोवाइडरआईडी"))। विलकस्केडऑनडेलेट (गलत); }   

जब मैं एक नया ग्राहक का रिकॉर्ड सम्मिलित करना चाहता हूं, मुझे एक मौजूदा सेवाप्रदाता उदाहरण का एक संदर्भ मिलता है और इसे क्लाइंट के सेवाप्रदाता संपत्ति

  क्लाइंट क्लाइंट = नया ग्राहक () {प्रथम नाम = "जॉन", अंतिमनाम = "डो"}; Client.ServiceProvider = सेवा प्रदाता [0]; // एक मौजूदा सेवाप्रदाता उदाहरण डीबी से पहले प्राप्त किया गया   

जब मैं SaveChanges को कॉल करता हूं, तो ईएफ मेरे सेवा प्रदाता तालिका में एक नया (डुप्लिकेट) रिकॉर्ड सम्मिलित करता है सभी मैं इसे करना चाहता हूं केवल ग्राहक तालिका में एक नया रिकॉर्ड सम्मिलित करना और मौजूदा सेवाप्रदाता उदाहरण के आईडी ServiceProviderId कॉलम के मान सेट करना >।

मैं क्या कर रहा हूं?

आपको मौजूदा सेवाप्रदाता संदर्भ में आप नए ग्राहक में सहेज रहे हैं। अटैच करें ईएफ को बताता है कि सर्विस प्रोवाइडर डेटाबेस में पहले से ही मौजूद है और उसके लिए INSERT को रोकता है सेवाप्रदाता:

  क्लाइंट क्लाइंट = नया ग्राहक () {प्रथम नाम = "जॉन", अंतिमनाम = "डो"}; context.ServiceProviders.Attach (serviceproviders [0]); Client.ServiceProvider = सेवा प्रदाता [0];    

Comments