10

मैं ईएफ 4.1 का उपयोग कर रहा हूं, और मैं एक सामान्य ईएफ edmx फ़ाइल बनाता हूं। मैं इसे डीबी से उत्पन्न करता हूं।इकाई फ्रेमवर्क डीबीकॉन्टेक्स्ट का उपयोग नहीं कर सकता, मॉडल बनाया जा रहा है

जब इसे उत्पन्न किया गया है, तो मैं नई कक्षाएं उत्पन्न करने के लिए दाएं क्लिक करें और कोड जनरेशन आइटम जोड़ें का चयन करें और इसके बजाय डीबीकॉन्टेक्स्ट का उपयोग करें। मैं टेम्पलेट डीबीकॉन्टेक्स्ट जेनरेटर का उपयोग करता हूं।

सबकुछ ठीक काम करता है।

using (var context = new PasDBEntities()) 
{ 
    var client=context.ClientCompanies.SingleOrDefault(_=>_.ID==clientCompanyId); 
    if(client!=null) 

मैं संदर्भ का एक नया उदाहरण बनाने कोई समस्या नहीं है, लेकिन जब मैं इसे समस्या क्वेरी करने के लिए कोशिश होते हैं:

तब मैं संदर्भ क्वेरी करने के लिए trie। मैं UnintentionalCodeFirstException पर फंस गया। और त्रुटि हो जाता है:

{"Code generated using the T4 templates for Database First and Model First development may not work correctly if used in Code First mode. To continue using Database First or Model First ensure that the Entity Framework connection string is specified in the config file of executing application. To use these classes, that were generated from Database First or Model First, with Code First add any additional configuration using attributes or the DbModelBuilder API and then remove the code that throws this exception."}

मैं पहली बार कोड का उपयोग नहीं करना चाहते हैं, लेकिन अगर मैं इसे "स्विच" कर सकते हैं बंद मैं नहीं जानता, या जहां समस्या है।

संदर्भ के लिए, मेरे निर्माता है ...

public partial class PasDBEntities : DbContext 
{ 
    public PasDBEntities() 
     : base("PasDBEntities") 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     throw new UnintentionalCodeFirstException(); 
    } 

... और कनेक्शन स्ट्रिंग:

<connectionStrings> 
    <add name="PasDBEntities" 
     connectionString="metadata=res://*/PasDB.csdl| 
            res://*/PasDB.ssdl| 
            res://*/PasDB.msl; 
          provider=System.Data.SqlClient; 
          provider connection string=&quot; 
          data source=localhost; 
          initial catalog=PasDB; 
          integrated security=True; 
          pooling=False; 
          multipleactiveresultsets=True; 
          App=EntityFramework&quot;" 
     providerName="System.Data.EntityClient" /> 
</connectionStrings> 
+6

(अपवाद उद्धृत करने के लिए) "** के आवेदन ** क्रियान्वित कॉन्फ़िग फ़ाइल" में इस कनेक्शन स्ट्रिंग है और न केवल एक कॉन्फ़िग फ़ाइल में पुस्तकालय परियोजना का? – Slauma

+1

आप बहुत सही हैं। मुझे नहीं पता था कि मुझे ईएफ का उपयोग करने में सक्षम होने के लिए मेरे यूनिट परीक्षण प्रोजेक्ट में कनेक्शनस्ट्रिंग के लिए एक अतिरिक्त कॉन्फ़िगरेशन फ़ाइल जोड़नी थी। जिसने मेरी समस्या हल की, एक और app.config फ़ाइल जोड़ना। – Fore

उत्तर

7

मैं तुम्हें पैदा करने के लिए टेम्पलेट्स के साथ edmx (.tt) प्रयोग कर रहे हैं कक्षाएँ। लेकिन अगर आपको किसी मौजूदा डेटाबेस से जानकारी मिल रही है, तो विज़ार्ड ऑब्जेक्ट कॉन्टेक्स्ट (मेटाडेटा सूचनाओं और इकाई फ्रेमवर्क के प्रदाता) के साथ संगत कनेक्शन स्ट्रिंग बनाएगा।

समस्या यह है कि आप जिस कनेक्शनस्ट्रिंग का उपयोग कर रहे हैं वह ऑब्जेक्ट कॉन्टेक्स्ट (डेटाबेस फर्स्ट और मॉडल फर्स्ट) के लिए है। डीबीकॉन्टेक्स्ट के लिए आपको मेटाडेटा सूचनाओं के बिना कनेक्शनस्ट्रिंग का उपयोग करना चाहिए।

आपका कनेक्शन स्ट्रिंग होना चाहिए:

<connectionStrings> 
<add name="PasDBEntities" 
    connectionString="data source=localhost; 
         initial catalog=PasDB; 
         integrated security=True; 
         pooling=False; 
         multipleactiveresultsets=True; 
         App=EntityFramework" 
    providerName="System.Data.SqlClient" /> 

+1

वास्तव में ईएफ 5 में आप डीबीकॉन्टेक्स्ट के साथ एडीएमएक्स और इकाई कनेक्शन का उपयोग करने में सक्षम होना चाहिए। वीएस2012 टी 4 में डाटाबेस फर्स्ट के लिए डीबीकॉन्टेक्स्ट उत्पन्न करने के लिए बदल दिया गया था। – Pawel

+1

मैं वास्तव में पहले कोड से पहले डेटाबेस में स्थानांतरित करने की कोशिश कर रहा था। आपके उत्तर से संकेत मिलता है कि हमें विशेष मेटाडाटा भरे स्ट्रिंग का उपयोग करने की आवश्यकता है - इसके लिए धन्यवाद। मूल रूप से इसका अर्थ यह है कि ADO.NET विज़ार्ड का उपयोग करते समय, "कनेक्शन कनेक्शन स्ट्रिंग सहेजें" का उपयोग करने की आवश्यकता है। – Worthy7

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