Howto निर्दिष्ट तालिका नाम के साथ इकाई फ्रेमवर्क कोड पहले धाराप्रवाह एपीआई


86

मेरे पास एक इकाई है और मैं अलग-अलग नाम के साथ इसे डेटाबेस तालिका में मैप करने के लिए इकाई ढांचे को कॉन्फ़िगर करने के लिए हूं।

मैं इसे आसानी से कोड फर्स्ट डेटा नोट ( DataAnnotations.Schema.TableAttribute ) के साथ कर सकता हूं ।

लेकिन अब सीमाओं के कारण मुझे कोड फर्स्ट फ्लुएंट एपीआई (मेरे डोमेन ऑब्जेक्ट्स का उपयोग बाहरी ग्राहकों द्वारा किया जाएगा, इसलिए उन्हें प्रौद्योगिकी-विशिष्ट नहीं होना चाहिए - जैसे कि DataAnnotations का कोई संदर्भ है)

मैंने MSDN पर खोज की है लेकिन कुछ नहीं मिला। तो क्या यह संभव है और कैसे?

धन्यवाद।


सामान्य तौर पर आपको डीटीओ (डेटा ट्रांसफर ऑब्जेक्ट्स) बनाने चाहिए और अपनी ईएफ ऑब्जेक्ट्स को उनके पास मैप करना चाहिए, आपको कभी भी ईएफ क्लासेस का उपयोग तब तक नहीं करना चाहिए जब तक कि आप छोटे / तुच्छ ऐप पर काम नहीं कर रहे हों।
रेगिगुएटर

जवाबों:


95

आप .ToTable()विधि का उपयोग करेंगे :

modelBuilder.Entity<Department>().ToTable("t_Department");   

स्रोत: MSDN: http://msdn.microsoft.com/en-us/data/jj591617.aspx


1
मैं इसे पसंद करता हूं क्योंकि मैं एक ही स्थान पर सभी एनोटेशन चाहता
हूं

क्या यह कोई मान्यता है कि तालिका मौजूद है? हमने एक तालिका का नाम बदला और कुछ भी नहीं टूटा, क्या यह वह व्यवहार है जिसकी आप अपेक्षा करेंगे? यह स्पष्ट रूप से नामांकित तालिका पर CRUD नहीं कर सकता है, लेकिन यह कुछ भी तोड़ने के लिए नहीं लगता ...
AZ चाड

217

आप टेबल एनोटेशन का उपयोग भी कर सकते हैं:

[Table("InternalBlogs")]
public class Blog

देखें: कोड पहला डेटा एनोटेशन


6
Thx, लेकिन अगर आप मेरे सवाल को ध्यान से पढ़ेंगे - तो आप उस एप्टो को सीधे उसके बीच में देखेंगे :)
bairog

2
भले ही एनोटेशन को "तालिका" नाम दिया गया हो, यह विचारों के साथ-साथ तालिकाओं के लिए भी ठीक काम करता प्रतीत होता है।
जॉन श्नाइडर

@JonSchneider मैं विशेष रूप से बिना किसी कारण के यहाँ परिभाषाएँ दे रहा हूँ, लेकिन एक दृश्य केवल पढ़ने के लिए तालिका है।
एरिक बर्गस्टेड

तालिका एनोटेशन System.ComponentModel.DataAnnotations.Schema; में रहता है;
पेतुर इनगी एगिल्सन

यह कैसे अधिक बढ़ गया है, यह सवाल स्पष्ट रूप से धाराप्रवाह एपीआई संस्करण के लिए पूछता है
वर्थ 7

7

प्रयोग करने योग्य विधि:

public class MyEntityMap : EntityTypeConfiguration<MyEntity>
{
    public const string TableName = "MyEntity";

    public MyEntityMap()
    {                   
        ToTable(TableName);

        Property(t => t.Id);
    }
}

1
मुझे लगता है कि कक्षाओं में आपकी मैपिंग को तोड़ना सबसे साफ तरीका है।
स्वेतंगमंग

1
लेकिन फिर अपनी OnModelCreatingविधि में आपको यह करना होगा: modelBuilder.Configurations.Add(new MyEntityMap());जहाँ आपके बजाय बस modelBuilder.Entity<MyEntity>().ToTable("MyEntityTable");इतना नहीं जोड़ा जा सकता है , यह क्लीनर तरीका नहीं है जब तक कि आपके पास इस इकाई के लिए अन्य मैपिंग करने के लिए भी न हो।
सर्ज सगन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.