में एक कस्टम सम्मेलन के साथ कॉलम मैपिंग को नियंत्रित करना मेरे पास एक वर्ग TypeEntity
है जो कई दर्जन इकाइयों के लिए बेस क्लास के रूप में कार्य करेगा। मैं टीपीसी का उपयोग कर रहा हूं, इसलिए मुझे बेस क्लास के सभी गुणों को कंक्रीट क्लास के नाम से तालिका में मैप करने की आवश्यकता है, और डेटाबेस उत्पन्न होने के लिए Key
फ़ील्ड सेट करें।इकाई फ्रेमवर्क 6
वर्तमान में मैं प्रत्येक इकाई प्रकार है कि इस तरह दिखता है के लिए एक EntityTypeConfiguration
के साथ इस कर रहा हूँ:
class LineItemType : EntityTypeConfiguration<Models.LineItemType>
{
public LineItemType()
{
this.Property(e => e.Key)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Map(e => e.MapInheritedProperties()
.ToTable(nameof(LineItemType)));
}
}
यह ठीक काम करता है, लेकिन बहुत दोहराव है। मुझे TypeEntity
से प्राप्त होने वाले प्रत्येक प्रकार के लिए कॉन्फ़िगरेशन क्लास बनाना याद रखना है, कुंजी सेट करें, और विरासत गुणों को मैप करें। यह कस्टम Convention
के लिए एक आदर्श मामला जैसा प्रतीत होता है।
मैं एक TypeEntityTpcConvention
Convention
इस प्रकार बनाया:
class TypeEntityTpcConvention : Convention
{
public TypeEntityTpcConvention()
{
this.Types<TypeEntity>()
.Configure(e => e.Property(p => p.Key)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity));
}
}
कौन सा Key
स्थापित करने के लिए के रूप में डेटाबेस उत्पन्न काम करता है, लेकिन मैं एक सम्मेलन अंदर से संपत्तियों के लिए तालिका मैपिंग का उपयोग करने के लिए किसी भी तरह नहीं मिल सकता है ।
this.Types<TypeEntity>()
.Configure(e => e.Property(p=>p.Key)
.ToTable(e.ClrType.Name));
न तो जिनमें से लगता है: प्रत्येक संपत्ति मैप किया जा करने की जरूरत है कि के लिए इस तरह
this.Types<TypeEntity>()
.Configure(e => e.MapInheritedProperties()
.ToTable(e.ClrType.Name));
या यहां तक कि एक फोन:
आदर्श रूप में, मैं कुछ इस तरह उम्मीद थी अस्तित्व होना। क्या Convention
के अंदर से संपत्तियों के मैपिंग को नियंत्रित करने का कोई तरीका है?
कुछ अतिरिक्त अनुसंधान के बाद, ऐसा लगता है कि वहाँ और अधिक उन्नत सम्मेलन कैसे इन गंभीर रूप से कमी है का उपयोग करने के लिए IStoreModelConvention
और IConceptualModelConvention
के रूप में उपलब्ध विकल्प है, लेकिन उपयोगी प्रलेखन हैं की तरह। ब्रेकपॉइंट्स और खिड़कियों को देखने के लिए कई घंटों के बाद पोकिंग करते हुए, मुझे पता नहीं चला कि इन इंटरफेस का उपयोग करके कॉलम मैपिंग को कैसे नियंत्रित किया जाए।
मेरे वर्तमान समाधान सभी प्रकार कि OnModelCreating
में TypeEntity
से विरासत को खोजने के लिए प्रतिबिंब का उपयोग करने, और सही मेज पर गुण नक्शा है। यह काम करता है, लेकिन यदि संभव हो तो मैं एक सम्मेलन का उपयोग करना पसंद करूंगा, क्योंकि यह वास्तव में लगता है कि चीजों के प्रकार के प्रकार के लिए बनाया गया था। मुझे लगता है कि मुझे कुछ याद आ रही है।
समस्या क्लास का नाम नहीं मिल रहा है, यह है कि '.ToTable' (या कुछ और जो मुझे किसी संपत्ति को एक अलग तालिका में रीडायरेक्ट करने की अनुमति देता है) एक 'कन्वेंशन' के संदर्भ में मौजूद प्रतीत नहीं होता है। –
आह .. मुझे गलत समझा गया। मैं टिप्पणी हटा दूंगा। –
मेरे पास एक समाधान है। यह वास्तव में एक सम्मेलन नहीं है, लेकिन यह आपके द्वारा निर्दिष्ट सभी प्रकारों पर स्वचालित रूप से लागू होता है (यानी आपको प्रत्येक इकाई के लिए कॉन्फ़िगर की एक नई पंक्ति जोड़ने की आवश्यकता नहीं है)। यदि आप रुचि रखते हैं, तो मैं इसे पोस्ट कर सकता हूं। –