2011-09-12 11 views
51

मैं MySQL वाली वेबसाइट के लिए ईएफ सीएफ दृष्टिकोण का उपयोग कर रहा हूं। किसी कारण से ईएफ "पोस्ट्रिमिनेटर" नामक मेरी पोस्ट टेबल में एक कॉलम बनाता है और इसमें वर्चर "पोस्ट" होता है।इकाई फ्रेमवर्क कोड पहले "भेदभावकर्ता" कॉलम बनाता है

यह कॉलम क्यों बनाया गया है? क्या मैं इसे बनाने से बचने के लिए कुछ कर सकता हूं? क्या इस कॉलम होने के कोई फायदे हैं?

उत्तर

86

Discriminator कॉलम का उपयोग Table-Per-Hierarchy विरासत परिदृश्यों में किया जाता है और आवश्यक है। आप उदाहरण के लिए इस तरह एक मॉडल ...

public abstract class BaseEntity 
{ 
    public int Id { get; set; } 
    //... 
} 

public class Post : BaseEntity 
{ 
    //... 
} 

public class OtherEntity : BaseEntity 
{ 
    //... 
} 

... है और अपने व्युत्पन्न संदर्भ के लिए एक DbSet<BaseEntity> जोड़कर उदाहरण के लिए, मॉडल की BaseEntity हिस्सा बनाते हैं, तो इकाई की रूपरेखा के द्वारा इस वर्ग पदानुक्रम मैप कर देंगे एक तालिका में डिफ़ॉल्ट, लेकिन एक विशेष कॉलम - Discriminator - इस तालिका में संग्रहीत विभिन्न प्रकारों (Post या OtherEntity) के बीच अंतर करने के लिए। यह कॉलम प्रकार के नाम से पॉप्युलेट हो जाता है (फिर Post या OtherEntity)।

+0

अच्छे उत्तर के लिए धन्यवाद। हालांकि, मेरा मॉडल व्युत्पन्न नहीं हुआ है। ईएफ अभी भी भेदभाव करने वाला क्यों करता है? – kasperhj

+0

@lejon: क्या आप अपने प्रश्न में मॉडल दिखा सकते हैं? मैंने कभी विरासत के संदर्भ में 'डिस्कमिनेटर' कॉलम नहीं देखा है। मेरा कोड केवल एक उदाहरण है। उदाहरण के लिए आप वही प्राप्त करेंगे यदि 'पोस्ट' स्वयं नहीं लिया गया है, लेकिन यदि' पोस्ट' से प्राप्त अन्य संस्थाएं हैं। – Slauma

+0

मैं देखता हूँ! पोस्ट से लिया गया एक और मॉडल। जवाब के लिए धन्यवाद! – kasperhj

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