2011-12-25 10 views
13

में शामिल नहीं किया गया था, मैं ईएफ 4 कोड प्रथम पैटर्न का उपयोग करने की कोशिश कर रहा हूं। मेरे प्रवर्तन कोड इस प्रकार है:ईएफ 4 कोड पहले: मॉडल संगतता की जांच नहीं की जा सकती क्योंकि एडमेटाटाटा प्रकार मॉडल

बनाएं मॉडल बिल्डर:

private bool BuildSqlServerSession(DbModelBuilder builder) 
{ 
    var model = 
    builder.Build(new SqlConnection(@"connection string")); 
    var cm = model.Compile(); 
    var context = new LittlePOSContext(cm); 
    var dbExists = context.Database.Exists(); 
    _session = new EFSession(context); 
    return dbExists; 
} 

यह काम करता है जब मैं पहली बार के लिए कोड चलाएँ:

private static DbModelBuilder CreateModelBuild() 
{ 
    var builder = new DbModelBuilder(); 

    //add entity classes about 12 of them 

    builder.Conventions.Remove<IncludeMetadataConvention>(); 
    return builder; 
} 

सत्र बनाएँ। लेकिन जब दूसरी बार पर चल रहा है और एक वस्तु context.Add(myEntity) का उपयोग कर रहा अपवाद निम्न प्राप्त जोड़ने की कोशिश कर:

Model compatibility cannot be checked because the EdmMetadata type was not 
included in the model. Ensure that IncludeMetadataConvention has been added 
to the DbModelBuilder conventions. 

मैं निम्न पंक्ति को हटाने की कोशिश की है:

builder.Conventions.Remove<IncludeMetadataConvention>(); 

लेकिन मैं अभी भी त्रुटि मिलती है।

उत्तर

30

खैर यह कुछ हद तक मूर्खतापूर्ण लगता है लेकिन असली अपराधी बयान निम्नलिखित था:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyContext>()); 

ऐसा लगता है कि DropCreateDatabaseIfModelChangesCode First दृष्टिकोण के साथ संगत नहीं है या इसे किसी और mystry कि मुझे समझ नहीं आता (अभी तक) है।

+22

यह संगत है।समस्या यह है कि पहली बार जब आप इसे बनाते हैं, तो इसमें मॉडल परिवर्तनों को ट्रैक करने के लिए कोई तालिका नहीं है, इसलिए यह शिकायत करता है। एक बार जब डेटाबेस पहली बार ईएफ द्वारा बनाया जाता है, तो आप अपनी प्रारंभिक रणनीति को उस चीज़ पर वापस बदल सकते हैं जो यह था। –

4

IncludeMetadataConvention को हटाने का मतलब है कि मॉडल बदलते समय प्रारंभकर्ता यह नहीं बता सकता है। इसे वापस जोड़ना या तो मदद नहीं करेगा क्योंकि यह केवल डीबी सृजन पर मेटा डेटा तालिका बनाता है, जो स्पष्ट रूप से अप्रत्याशित डेटाबेस या डेटाबेस के लिए मौजूद नहीं है जो सम्मेलन अक्षम किए गए थे।

समाधान डेटाबेस छोड़ने और सम्मेलन सक्षम करना या प्रारंभकर्ता अक्षम और डेटाबेस एक और तरीका है (मैनुअल या एफई माइग्रेशन)

0

आप वी.एस. 2012 में इस त्रुटि हो रही है और का उपयोग कर डिबग मोड में चला रहे हैं अद्यतन करने है आईआईएस एक्सप्रेस, विजुअल स्टूडियो डेवलपमेंट सर्वर पर स्विच करने का प्रयास करें।

मुझे विंडोज 7 मशीन पर विजुअल स्टूडियो 2012 का उपयोग करके कोड-पहले एएसपीएनटी एमवीसी 4 एप्लिकेशन में एक ही त्रुटि मिल रही थी, जो SQL सर्वर स्थानीय डीबी (सर्वर, नो * .एमडीएफ) पर मार रहा था, मेरे स्थानीय पर चल रहा था डीबग मोड में होस्ट करें।

मेरा प्रारंभकर्ता DropCreateDatabaseIfModelChanges विशेषता के साथ चिह्नित है, और मैं डेटाबेस को कॉल कर रहा हूं। Global.ascx.cs में प्रारंभ करें Application_Start। यदि डेटाबेस को गिराया जा रहा है और फिर से बनाया गया है कि कैसे बिल्ली में लापता माइग्रेशन टेबल के बारे में शिकायत हो सकती है? यह विशेष रूप से बढ़ रहा था क्योंकि मैं एक ही दृष्टिकोण का उपयोग करके एक और वेब एप्लिकेशन स्थापित करता था और यह बेकार ढंग से काम करता था।

ऐप चलाने से पहले डेटाबेस को मैन्युअल रूप से छोड़ने से भी समस्या ठीक नहीं हुई।

"अच्छा" ऐप की तुलना "खराब" ऐप की तुलना में, केवल अंतर वेब सर्वरों की पसंद थी। "अच्छा" ऐप विजुअल स्टूडियो डेवलपमेंट सर्वर का इस्तेमाल करता था; "बुरा" आईआईएस एक्सप्रेस का इस्तेमाल किया।

मैंने "खराब" ऐप को विजुअल स्टूडियो डेवलपमेंट सर्वर पर स्विच किया और त्रुटि गायब हो गई!

मेरे पास अभी "क्यों" में खोदने का समय नहीं है, लेकिन स्पष्ट रूप से आईआईएस एक्सप्रेस द्वारा कुछ गलत तरीके से कैश किया जा रहा है।

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