2015-05-31 29 views
7

यह सुनिश्चित नहीं है कि मेरे सेटअप के साथ क्या हुआ है, लेकिन देर से, जब मैं अपने डेटाबेस को नए फ़ील्ड या नई टेबल के साथ अपडेट करता हूं जिसमें किसी विशेष तालिका के लिए विदेशी कुंजी होती है (Person) , मेरा डेटाबेस रीफ्रेश नए फ़ील्ड को चुनता है, लेकिन एफके रिश्तों को Person पर पहचान नहीं करता है। अधिकांश अन्य तालिकाओं के लिए विदेशी कुंजी ठीक काम करते हैं।ईएफ डीबी फर्स्ट रीफ्रेश किसी विशेष तालिका में एफके का पता नहीं लगा रहा है

क्या सेटिंग गुम हो सकती है?

शायद एक सुराग: Person कई अन्य तालिकाओं के लिए मूल प्रकार के रूप में कार्य करता है, उदा। Manager, Customer इत्यादि जो सभी नाम, जन्म तिथि, लिंग इत्यादि की मूलभूत विशेषताओं को साझा करते हैं, और वंशज तालिकाओं में प्राथमिक कुंजी होती है जो Person पर विदेशी कुंजी के रूप में भी कार्य करती है। वंशज तालिकाओं के लिए एफके रिश्तों को भी पहचाना नहीं जा रहा है।

उत्तर

3

मुझे विश्वास है कि मैंने जवाब में खुद को ठोकर खाई है। तालिका में प्राथमिक कुंजी के अतिरिक्त आईडी फ़ील्ड पर एक अनुक्रमणिका थी। किसी कारण से, मेरी मेज पर विदेशी कुंजी वाली सभी अन्य सारणी इंडेक्स को पीके के बजाय संदर्भित कर रही थीं ... और जाहिर है कि ईएफ से नरक को भ्रमित कर दिया गया था। मैंने सभी एफके गिरा दिए, इंडेक्स गिरा दिया, एफके को फिर से बनाया और इंडेक्स को फिर से बनाया ... और वॉयला! एसोसिएशन अब सभी ईडीएमएक्स में दिखाई देते हैं!

3

जटिल विरासत मॉडल मैप करते समय इकाई फ्रेमवर्क सीमित हो सकता है। आप मूल रूप से तीन विकल्प हैं लेकिन जब विरासत मानचित्रण:

TPH(पदानुक्रम प्रति तालिका) मानचित्रण: यह मानचित्रण पदानुक्रम और परस्पर विरोधी या "एक ही नाम" फ़ील्ड हो जाएगा में अपने सभी क्षेत्रों के लिए एक एकल तालिका उत्पन्न करता है एक संख्यात्मक बीज द्वारा जोड़ा गया। उदाहरण NAME1 (व्यक्ति), NAME2 (प्रबंधक) आदि के लिए

टीपीटी(तालिका-प्रति-प्रकार) mappping: यह मानचित्रण, प्रत्येक वस्तु के लिए व्यक्तिगत टेबल उत्पन्न करता है लेकिन परस्पर विरोधी गुण नामों केवल आधार में मैप किया जाता है कक्षा। आपके उदाहरण में व्यक्ति वर्ग। नोट: टीपीटी जटिल होने के कारण प्रश्नों में शामिल होने के लिए हतोत्साहित किया जाता है और कुछ मामलों में विसंगतियों आप अनुभव कर रहे

टीपीसी(तालिका-प्रति-ठोस प्रकार) मानचित्रण:, टीपीटी की तरह एक के सभी गुण को छोड़कर विरासत में मिला गुण, इसी तालिका के कॉलम के लिए नक्शे सहित वर्ग,

समाधान:

धारणा है कि आप टीपीटी उपयोग कर रहे हैं और यह आपकी विरासत में मिला वर्ग के सदस्यों मैप नहीं किया जा रहा है इसका मतलब है। मैं सुझाव दूंगा कि आप अपने मैपिंग और माइग्रेशन को उत्पन्न करने के लिए टीपीसी देखें।

टीपीसी उदाहरण::

प्रचार यह आपके DbCOntext में वस्तु:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Person>() 
     .Property(c => c.CourseID) 
     .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 

     modelBuilder.Entity<Manager>().Map(m => 
     { 
      m.MapInheritedProperties(); 
      m.ToTable("Manager"); 
     }); 

     modelBuilder.Entity<Customer>().Map(m => 
     { 
      m.MapInheritedProperties(); 
      m.ToTable("Customer"); 
     }); 
    } 

अस्वीकरण: इसके बजाय मुश्किल आप ऊपर उल्लेख किया मैपिंग प्राप्त करने के लिए एफई में सुविज्ञ एपीआई को देखने के लिए की आवश्यकता होगी यह जानने के लिए कि विरासत संरचना या निष्पादित माइग्रेशन को देखे बिना आपकी समस्या क्या है, हालांकि मुझे लगता है कि ईएफ संबंधों में सबसे आम समस्या ऊपर उल्लिखित है।

+0

यह कोड कोड फर्स्ट और डीबीकॉन्टेक्स्ट की दिशा में तैयार किया गया प्रतीत होता है। हमारी परियोजना डीबी फर्स्ट है, लीगेसी ऑब्जेक्ट कॉन्टेक्स्ट का उपयोग करके ... –

+0

@ शूलबहर हाँ उदाहरण कोड फर्स्ट के लिए है, हालांकि एक ही सिद्धांत डीबी फर्स्ट के लिए लागू होता है। क्या आप एक ईडीएम उत्पन्न करते हैं या आप SQL डेटाबेस प्रोजेक्ट के साथ काम कर रहे हैं? – geekonedge

+0

मैं एक ईडीएम –

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