2012-08-22 13 views
5

मेरे पास कुछ डोमेन क्लास हैं जो इस तरह कुछ दिखते हैं, कि मैं कोड फर्स्ट (ईएफ 4.3 में) के साथ मॉडल करना चाहता हूं।कोड प्रथम कक्षाओं को नेविगेशन गुणों की आवश्यकता क्यों है?

public class Foo { 
    // ... 
} 

public class Bar { 
    // ... 

    public Foo Foo { get; set; } 
} 

public class Baz { 
    // ... 

    public Foo Foo { get; set; } 
} 

हर example मैं हालांकि देखने के अलावा, विदेशी वस्तु संदर्भ Foo कक्षा में जुड़ जाते हैं। क्या Foo कक्षा Bar और Baz कक्षा का अज्ञेयवादी हो सकता है, या क्या मुझे वास्तव में ऐसा कुछ करने की ज़रूरत है?

public class Foo { 
    // ... 
    public virtual Bar { get; set; } 

    public virtual Baz { get; set; } 
} 

this answer के अनुसार, कक्षाएं नेविगेशन गुण हैं जरूरत है। मैं कोड फर्स्ट में नया हूं, तो क्या कोई यह समझा सकता है कि यह मामला क्यों हो सकता है? क्या फ्लूएंट एपीआई का उपयोग कर इस तरह की Foo कक्षा को प्रदूषित करने से बचने का कोई तरीका है?

यह मेरे लिए अजीब लगता है कि Foo को इसका उपयोग करने वाले प्रत्येक वर्ग के बारे में जानने की आवश्यकता होगी। क्या मेरा डिज़ाइन बस मूल रूप से किसी तरह से त्रुटिपूर्ण है?

उत्तर

1

दूसरा उत्तर आंशिक रूप से सही है।

यदि आप अपने डेटाबेस मॉडल को के साथ बूटस्ट्रैप बूट करने के लिए कोड-फोस्ट चाहते हैं तो तालिकाओं के बीच संबंधों को कम से कम एक वर्ग में एक नेविगेशन प्रॉपर्टी को परिभाषित करना होगा।

मैपिंग निश्चित रूप से रिश्ते के बिना भी काम करेगा, लेकिन आपको डेटाबेस/एसक्यूएल स्तर पर बाधा नहीं होगी। जब तक आप उन्हें माइग्रेशन या कुछ अन्य एसक्यूएल-स्क्रिप्ट के साथ जोड़ते हैं।

हालांकि आपके उदाहरण में मुझे पूरा यकीन नहीं है कि आप किस तरह के रिश्ते को किसी भी तरह परिभाषित करने की कोशिश कर रहे हैं। क्या यह एक-से-एक संबंध होना चाहिए?

उस मामले में, फू को किसी भी अन्य वर्ग के बारे में जानने की आवश्यकता नहीं है जिसका संदर्भ है, जैसा कि आपके लिंक किए गए प्रश्न में उत्तर दिया गया है, केवल एक कक्षा में यह होना आवश्यक है।

+0

धन्यवाद, यह मेरी गलतफहमी स्पष्ट किया। मैंने जल्दी ही दूसरे जवाब का गलत अर्थ बताया कि 'फू' को नेविगेशन संपत्ति होगी। – Eric

2

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

एक बार जब आप इस सीमा को स्वीकार तो आप बस अपने मॉडल का उपयोग कर सकते हैं और नक्शा इसे पसंद:

modelBuilder.Entity<Bar>() 
      .HasRequired(b => b.Foo) 
      .WithOptional(); 

modelBuilder.Entity<Baz>() 
      .HasRequired(b => b.Foo) 
      .WithOptional(); 
+0

यह बहुत उपयोगी है, धन्यवाद। – Eric

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