8

से हम .edmx मॉडल का उपयोग कर डेटाबेस-प्रथम दृष्टिकोण के साथ ईएफ 4.0 का उपयोग कर रहे हैं।ईएफ 6 कोड में इकाई वर्गों को कैसे बनाया जाता है - पहले डेटाबेस

अब हम ईएफ 6.1.3 में अपग्रेड कर रहे हैं, और हम जांच कर रहे हैं कि .edmx मॉडल के साथ या उसके बिना जाना है या नहीं। हम निश्चित रूप से अभी भी हमारे डेटाबेस स्कीमा के नियंत्रण में रहना चाहते हैं - इसलिए हम SQL स्क्रिप्ट के साथ नई टेबल आदि बनायेंगे और फिर मौजूदा डेटाबेस से ईएफ मॉडल (या तो .edmx या सिर्फ कोड कक्षाएं) उत्पन्न करेंगे।

विजुअल स्टूडियो 2013 के साथ अपने परीक्षणों के दौरान, मैंने एक परेशान बिंदु देखा जब ईएफ 6 मौजूदा डेटाबेस से कक्षाएं बनाता है। मेरे पास Customer वर्ग है जो Contact कक्षा से तीन बार लिंक करती है - एक बार DesignContact के लिए, एक बार SalesContact और SupportContact के लिए तीसरी बार। आदि Customer तालिका में कॉलम के रूप में संग्रहीत हैं।

CREATE TABLE dbo.Contact 
(
    ContactID INT NOT NULL 
     CONSTRAINT PK_Contact PRIMARY KEY CLUSTERED, 
    Name VARCHAR(200), 
    Address VARCHAR(200), 
    ZipCode VARCHAR(20), 
    City VARCHAR(100), 
    Phone VARCHAR(100) 
) 

CREATE TABLE dbo.Customer 
(
    CustomerID INT NOT NULL 
     CONSTRAINT PK_Customer PRIMARY KEY CLUSTERED, 
    Name VARCHAR(200), 
    -- other properties 
    DesignContactID INT 
     CONSTRAINT FK_Customer_DesignContact 
      FOREIGN KEY REFERENCES dbo.Contact(ContactID), 
    SalesContactID INT 
     CONSTRAINT FK_Customer_SalesContact 
      FOREIGN KEY REFERENCES dbo.Contact(ContactID), 
    SupportContactID INT 
     CONSTRAINT FK_Customer_SupportContact 
      FOREIGN KEY REFERENCES dbo.Contact(ContactID), 
) 

जब डेटाबेस से कक्षाएं बनाने, मैं इस देखें::

आप इस T-SQL का उपयोग करने वालों कक्षाएं बना सकता है

  • Customer वर्ग क्षेत्रों के रूप में मेरे तीन xxxContactId स्तंभ होते हैं - जैसा कि
  • ईएफ भी Contact प्रकार के तीन नेविगेशन गुण उत्पन्न करता है - लेकिन यह उन्हें Contact, Contact1, 0 कहता है- uuuuuggghHHHH!

मैं उन बुरी तरह खराब नामित नेविगेशन गुण के आसपास पाने के लिए एक रास्ता खोजने के लिए बुरा है क्योंकि ..... ये हैं कोशिश कर रहा हूँ:

  • उनकी नहीं सहज ज्ञान युक्त - जो एक अंक जो संपर्क करने के लिए अब ?
  • "स्थिर" हैं, या वे समय के साथ बदल सकते हैं, अगर Contact के चौथे रिश्ते को पेश किया गया है? यकीन नहीं ..... (इस पर कोई दस्तावेज़ नहीं मिल सकता है)
  • सिर्फ उनके नाम बिल्कुल भयानक हैं ...... उन्हें DesignContact क्यों कहा जाता है (DesignContactId पर आधारित), SalesContact (SalesContactId पर आधारित) आदि।?

एफई 4.1 में और ऊपर, आप .edmx लिए टी -4 टेम्पलेट्स जोड़ सकते हैं और पीढ़ी प्रक्रिया को प्रभावित करने में सक्षम थे - कि अभी भी संभव हो, EF6 साथ किसी भी तरह है अगर आप "मौजूदा डेटाबेस से उत्पन्न कोड-पहले" कर रहे हैं दृष्टिकोण? मुझे अब उस विषय पर कोई ब्लॉग पोस्ट या आलेख नहीं मिला .....

या ईएफ कैसे कक्षाएं उत्पन्न करता है - सबसे विशेष रूप से नेविगेशन गुणों को प्रभावित करने का एक और तरीका है? क्या मैं इसे प्रभावित करने के लिए किसी प्रकार का कस्टम सम्मेलन या कुछ परिभाषित कर सकता हूं?

+1

@JulieLerman: इस पर कोई विचार (EF_ की _Queen रूप :-)?) –

+0

@ रोवनमिलर: इसे संभालने के लिए आपकी आस्तीन को कोई विचार या चाल? –

+0

लागू: http://stackoverflow.com/a/13064383/1207195? (हथौड़ा की वजह से डुप्ली के रूप में मतदान नहीं) –

उत्तर

0

में छिल के लिए हर किसी के लिए धन्यवाद मैं विभिन्न दृष्टिकोण की कोशिश की:

  • मैं Codeplex पर "एफई रिवर्स पोको" परियोजना की कोशिश की लेकिन वे बिल्कुल ही नहीं

  • इसके साथ काफी खुश था
  • मैंने ईएफ 6 के लिए ईएफ पावर टूल्स की कोशिश की - और यह ठीक काम करता था। इसने मुझे कोड जनरेशन प्रक्रिया को प्रभावित करने के लिए टी 4 टेम्पलेट्स जोड़ने की अनुमति दी। काम करता है - लेकिन चुनौती अब कोड पीढ़ी के आधार के रूप में उपयोग किए जाने वाले ऑब्जेक्ट मॉडल को समझने के लिए है (जो अनियंत्रित प्रतीत होता है ....)

  • मैंने Entity Framework 6.1.3 Code Templates for C# NuGet पैकेज की कोशिश की - बहुत अच्छी तरह से काम करता है, लेकिन विद्युत उपकरण के रूप में ही मुद्दे हैं - वास्तव में ऑब्जेक्ट मॉडल की आवश्यकता होगी की खुदाई की, कुछ भी बदलने की एक बहुत

0

आप .edmx फ़ाइल (नोटपैड, आदि के माध्यम से जेनरेटेड कक्षाओं के लिए सेटिंग्स को बदल सकते हैं)। इसे बदलने से पहले बस इसे वापस लें। यह आदर्श नहीं है, लेकिन यह डीबी से काम करता है और अपडेट आपके परिवर्तनों को ओवरराइट नहीं करता है।-

<EntityType Name="SomeEntityName" a:TypeAccess="Internal" xmlns:a="http://schemas.microsoft.com/ado/2006/04/codegeneration"> 
    <Key> 
     <PropertyRef Name="Id" /> 
    </Key> 
    <Property Name="Id" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" /> 
    <Property Name="Contact" Type="String" Nullable="false" MaxLength="Max" FixedLength="false" Unicode="false" /> 
    <Property Name="DesignContact" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="false" /> 
</EntityType> 
+0

मेरे पास ** एक '.edmx' फ़ाइल नहीं है ...... यह डेटाबेस से ** कोड-पहले ** (या केवल कोड) में उत्पन्न होता है सी # कक्षाएं - कोई और '.edmx' फ़ाइल ..... –

+0

@marc_s मेरे हिस्से पर खराब पढ़ने। मैं कोड-पहले गया हूं और इकाई मैपिंग लिखना बहुत बुरा नहीं है, जो, अगर मैं सही ढंग से पढ़ रहा हूं, तो आपकी समस्या को कम कर देगा। अन्यथा मैंने edmx जेनरेट किया है और यदि आवश्यक हो तो इसे संपादित किया है। –

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