दिलचस्प पोस्ट
क्या एक कार्यक्रम संकलन के दौरान लाइब्रेरी पर निर्भर करता है, लेकिन रनटाइम नहीं? प्रतिशत के साथ प्रीलोड – जावास्क्रिप्ट / jquery पायथन में थ्रेडिंग एक उदाहरण पर विशेष विधियों को ओवरराइड करना पृष्ठ पर सभी शब्दों के संबंधित निर्देशों को इसे प्राप्त करने के साथ एक्सप्लस करें IOS में एक नेविगेशन बार के साथ एक दृश्य के टैब बार को कैसे छुपाने / दिखाने के लिए? एक JAR फ़ाइल बनाने के लिए JarOutputStream का उपयोग कैसे करें? NHibernate.MappingException: कोई persister नहीं: XYZ आईआईएस यूआरएल आरईआरआई बनाम यूआरएल रूटिंग संग्रहीत कार्यविधि फ़ंक्शन में डायनामिक तालिका नाम रनटाइम में वर्तमान कल्चर कैसे बदल सकता है? जावास्क्रिप्ट में बच्चों और बच्चों के बीच अंतर क्या है? फ्लोट और डबल के बीच का अंतर सिस्टम वॉल्यूम IOS प्राप्त करें एक्सप्रेस में पूर्ण यूआरएल कैसे प्राप्त करें?

डेटाबेस बनाया गया था क्योंकि <डेटाबेस> संदर्भ का समर्थन मॉडल बदल गया है

त्रुटि संदेश:

"डाटाबेस बनाने के बाद से 'एड्रेसबुक' संदर्भ का समर्थन करने वाला मॉडल बदल गया है। या तो डेटाबेस को मैन्युअल रूप से हटाना / अद्यतन करना या डेटाबेसबेसैटसेटइलाइज़र को एक आईडीबेसइंस्टालियर इंस्टेंस के साथ कॉल करना। उदाहरण के लिए, RecreateDatabaseIfModelChanges की रणनीति स्वचालित रूप से डेटाबेस को स्वचालित रूप से हटा दिया जाएगा और पुनःनिर्माण करता है, और वैकल्पिक रूप से इसे नए डेटा के साथ बीज दें। "

मैं कोड-प्रथम सुविधा का उपयोग करने की कोशिश कर रहा हूं और इसके बाद मैंने लिखा है:

var modelBuilder = new ModelBuilder(); var model = modelBuilder.CreateModel(); using (AddressBook context = new AddressBook(model)) { var contact = new Contact { ContactID = 10000, FirstName = "Brian", LastName = "Lara", ModifiedDate = DateTime.Now, AddDate = DateTime.Now, Title = "Mr." }; context.contacts.Add(contact); int result = context.SaveChanges(); Console.WriteLine("Result :- "+ result.ToString()); } 

संदर्भ वर्ग:

 public class AddressBook : DbContext { public AddressBook() { } public AddressBook(DbModel AddressBook) : base(AddressBook) { } public DbSet<Contact> contacts { get; set; } public DbSet<Address> Addresses { get; set; } } 

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

 <?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="AddressBook" providerName="System.Data.SqlClient" connectionString="Data Source=MyMachine;Initial Catalog=AddressBook; Integrated Security=True;MultipleActiveResultSets=True;"/> </connectionStrings> </configuration> 

इसलिए, डेटाबेस नाम "पता पुस्तिका" है और त्रुटि तब होती है जब मैं संपर्क वस्तु को संदर्भ में जोड़ने का प्रयास कर रहा हूं। क्या मुझसे यहां कुछ छूट रहा है?

वेब के समाधान से एकत्रित समाधान "डेटाबेस बनाया गया था क्योंकि <डेटाबेस> संदर्भ का समर्थन मॉडल बदल गया है"

अब यह:

 protected override void OnModelCreating(DbModelBuilder modelBuilder) { Database.SetInitializer<YourDbContext>(null); base.OnModelCreating(modelBuilder); } 

आपकी YourDbContext.cs फ़ाइल में

यहाँ वास्तव में क्या हो रहा है, जेफ द्वारा पोस्ट स्कॉट गुजरात के ब्लॉग से कुछ जानकारी है:

जो लोग इस अपवाद को देख रहे हैं, उनके लिए:

"डेटाबेस निर्माण के बाद से 'प्रोडक्शन' प्रसंग का समर्थन करने वाला मॉडल बदल गया है। या तो मैन्युअल रूप से डाटाबेस को हटाना / अपडेट करना है, या Database.SetInitializer IDatabaseInitializer को किसी IDatabaseInitializer इंस्टेंस के साथ कॉल करें।"

यहाँ क्या हो रहा है और इसके बारे में क्या करना है:

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

 Database.SetInitializer<YourDbContext>(null); 

जेफ

इकाई फ़्रेमवर्क 5.0.0.0 के लिए – 6.1.3

आप वास्तव में निम्नलिखित करना चाहते हैं:

 1. using System.Data.Entity; to startup file (console app --> Program.cs / mvc --> global.asax 2. Database.SetInitializer<YourDatabaseContext>(null); 

हां, मैट फ़्रायर सही है। अद्यतन-संपादन: चेतावनी यह है कि मैं इस कोड को global.asax को जोड़ने के बजाय अपने DbContext वर्ग में जोड़ा है

 protected override void OnModelCreating(DbModelBuilder modelBuilder) { // other code Database.SetInitializer<YOURContext>(null); // more code } 

जैसा कि अन्य लोगों ने बताया है कि यह इकाई परीक्षण को संभालने के लिए अच्छा है।

वर्तमान में मैं इसे इकाई फ़्रेमवर्क 6.1.3 / के साथ 4.6.1 का उपयोग कर रहा हूँ

यह फिक्स CTP5 के बाद काम नहीं करता।

आपको Database.SetInitializer<YourContext>(null);

बस यहाँ जवाब और पता लगाने के बारे में पता लगाने के बारे में पता चला। बस निम्नलिखित करने की जरूरत है

 public class AddressBook: DbContext { protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.IncludeMetadataInDatabase = false; } } 

या आप इस लाइन को अपने Global.asax.cs फ़ाइल में Application_Start () के नीचे रख सकते हैं:

 System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<ProjectName.Path.Context>()); 

अपने नेमस्पेस और संदर्भ में ProjectName.Path.Context को बदलना सुनिश्चित करें। यदि पहले कोड का उपयोग कर रहे हैं तो यह हटाएगा और एक नया डेटाबेस बना देगा, जब भी स्कीमा में कोई भी परिवर्तन किया जाएगा।

बस SQL ​​सर्वर प्रबंधन स्टूडियो में followng sql कमांड चलाएँ:

 delete FROM [dbo].[__MigrationHistory] 

मैंने इस मुद्दे को हल करने के लिए कई दिन बिताए, कई अलग-अलग पोस्टों का विश्लेषण किया और कई विकल्पों की कोशिश की और अंत में तय की गई। ईएफ कोड पहले माइग्रेशन का उपयोग कर अपने समाधान में यह 2 परियोजनाएं:

  • कंसोल अनुप्रयोग "डेटामोडेल" मुख्य रूप से असेंबली के रूप में उपयोग कर रहा है जिसमें मेरे सभी कोड को पहली संस्थाएं, डीबीसीन्टेक्स, मिरगेशन और जेनेरिक रिपॉजिटरी शामिल हैं। मैंने पैकेज प्रबंधक कंसोल से माइग्रेशन को सक्षम करने के लिए इस प्रोजेक्ट को अलग-अलग स्थानीय डेटाबेस फ़ाइल (डेटामैलोड / ऐपडाटाटा फ़ोल्डर में) शामिल किया है।
  • वेबएपी, जो डेटामॉडेल प्रोजेक्ट का संदर्भ देता है और वेबएपी / एपडाटाटा फ़ोल्डर से स्थानीय डेटाबेस फ़ाइल का उपयोग करता है, जो परियोजना में शामिल नहीं है

वेबएपी का अनुरोध करते समय मुझे यह त्रुटि मिली …

मेरा वातावरण:

  • विंडोज 8.1 x 64
  • अपडेट 1 के साथ विजुअल स्टूडियो 2015 पेशेवर
  • .NET Framework 4.6.1 के लिए लक्षित मेरी सभी परियोजनाएं
  • न्यूगेट से EntityFramework 6.1.3

यहां मैंने सभी टिप्पणियां एकत्र की हैं जिन पर आपको ध्यान देना चाहिए और सभी शर्तों / आवश्यकताओं को पूरा किया जाना चाहिए, जिनका उल्लेख अपवाद से बचने के लिए किया गया है:

  1. आपको अपने समाधान में सभी परियोजनाओं के लिए EntityFramework Nuget पैकेज का केवल एक संस्करण का उपयोग करना चाहिए।
  2. डेटाबेस, क्रमिक रूप से चलने के द्वारा बनाई गई सभी माइग्रेशन स्क्रिप्टों का एक ही संरचना / स्कीमा होना चाहिए जैसा कि आप डेटाबेस को लक्षित करते हैं और इकाई मॉडल के अनुरूप होते हैं। निम्नलिखित 3 चीजों को एक दूसरे के अनुरूप होना चाहिए / प्रतिबिंबित करना चाहिए:
    • आपकी सभी माइग्रेशन स्क्रिप्ट ऊपर तक चलें
    • वर्तमान कोड प्रथम इकाई मॉडल राज्य (डीबीसीटेक्स्ट, संस्थाएं)
    • लक्ष्य डेटाबेस
  3. लक्ष्य डेटाबेस (एमडीएफ फाइल) अद्यतन / अंतिम माइग्रेशन स्क्रिप्ट के अनुरूप होना चाहिए। सत्यापित करें कि आपके लक्षित डेटाबेस में "__MigrationHistory" तालिका में आपके पास सभी माइग्रेशन स्क्रिप्ट के लिए रिकॉर्ड हैं, इसका मतलब है कि सभी माइग्रेशन स्क्रिप्ट सफलतापूर्वक उस डेटाबेस पर लागू हो गई थी। मैं आपको सलाह देता हूं कि आप अपने स्टूडियो के लिए सही स्टूडियो का प्रयोग करें, पहले कोड और अपने डेटाबेस से संबंधित प्रसंग, प्रोजेक्ट -> नया आइटम जोड़ें -> एडीओनेट वस्तु डाटा मॉडल -> कोड पहले डेटाबेस से: बेशक, एक विकल्प के रूप में, यदि आपके पास कोई डाटाबेस नहीं है तो आप मैन्युअल रूप से मॉडल (कोड पहले संस्थाएं और संदर्भ) लिख सकते हैं और फिर आरंभिक माइग्रेशन और डाटाबेस उत्पन्न कर सकते हैं।
  4. कनेक्शन स्ट्रिंग का नाम, स्टार्टअप प्रोजेक्ट (Web.config / App.config) की कॉन्फ़िग फाइल में MyConnectionString :

     <configuration> <connectionStrings> <add name="MyConnectionString" connectionString="..."> </connectionStrings> <configuration> 

    आपके DbContext के निर्माता में पारित पैरामीटर के बराबर होना चाहिए:

      public partial class MyDbContext : DbContext { public MyDbContext() : base("name=MyConnectionString"){} ... 
  5. पैकेज प्रबंधक कंसोल का उपयोग करने से पहले, सुनिश्चित करें कि आप अपडेट के लिए सही डेटाबेस का उपयोग कर रहे हैं या माइग्रेशन उत्पन्न कर सकते हैं और आवश्यक प्रोजेक्ट को समाधान के स्टार्टअप प्रोजेक्ट के रूप में सेट किया गया है डेटाबेस से कनेक्ट करने के लिए यह उस .config फ़ाइल से कनेक्शन स्ट्रिंग का उपयोग करेगा, जो प्रोजेक्ट में है, जिसे स्टार्टअप प्रोजेक्ट के रूप में सेट किया गया है।
  6. और मुख्य, जिसने मेरी समस्या तय की है: यह अजीब है, लेकिन मेरे वेबएपी / बिन फ़ोल्डर में डेटामोडेल.एक्सई पुराना था, आखिरकार बिल्ड से रिफ्रेश नहीं हुआ। चूंकि माइग्रेशन मेरे विधानसभा डेटामोडेल.एक्सए में एम्बेड किए गए थे, फिर मेरे वेबएपी पुराने मिर्जेशन का उपयोग करते हुए डेटाबेस अपडेट करते थे। मुझे उलझन में था कि वेबएपी में डाटाबेस को अपडेट करने के बाद यह डेटामैलोड से नवीनतम माइग्रेशन स्क्रिप्ट के अनुरूप नहीं है। निम्नलिखित कोड स्वचालित रूप से (यदि मौजूद नहीं है) बनाता है या मेरे वेबएपी / ऐपडाटाटा फ़ोल्डर में नवीनतम माइग्रेशन स्थानीय डेटाबेस के अपडेट।

      public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { Database.SetInitializer(new MigrateDatabaseToLatestVersion<ODS_DbContext, Configuration>()); ... 

    वेबएपी से पूरी तरह से बिन और ओबोज फ़ोल्डर्स हटाए जाने से, वेबएपी / एपडाटा, बनाया गया, पुनरारंभ किया गया WebApi से पूरी तरह से हटाए जाने की कोशिश की लेकिन मैंने इसे साफ करने और फिर से तैयार करने की कोशिश की, लेकिन इससे कोई मदद नहीं की, उसने सही डेटाबेस बनाया – आलसी आरम्भिकरण ऊपर दिए गए लाइन), जो नवीनतम माइग्रेशन से संबंधित है और अपवाद अधिक दिखाई नहीं देता। इसलिए, यह आपकी समस्या को ठीक कर सकता है:

    1. अपने स्टार्टअप प्रोजेक्ट से मैन्युअल रूप से बिन, ओबीजी फ़ोल्डर्स हटा दें (जो आपके डेटाबेस को अपडेट करता है / अपडेट करता है)
    2. अपने स्टार्टअप प्रोजेक्ट का निर्माण या बेहतर क्लीन अप करें और आप सभी का समाधान पुन: बनाएँ।
    3. प्रोजेक्ट लॉन्च करने के बाद डेटाबेस को पुन: बनाएँ (उपरोक्त पंक्तियां निष्पादित करें) या पैकेज प्रबंधक कंसोल "update-database" कमांड का उपयोग करें।
    4. मैन्युअल रूप से जांच लें कि उत्पन्न डीबी और __MirgationHistory नवीनतम माइग्रेशन स्क्रिप्ट से मेल खाती है या नहीं।

मेरे लिए, 4.3.1 में नवीनीकरण के साथ, मैं सिर्फ एडमेटेटाडेटा तालिका को छोटा कर दिया है या बस इसे पूरी तरह से हटाएं

VB.NET डेवलपर्स के लिए:

Glabal.asax.vb फ़ाइल में निम्न पंक्ति जोड़ें विधि के अंत में, Application_Start ()

 Database.SetInitializer(Of ApplicationDbContext)(Nothing) 

अपने विशिष्ट डीबी संदर्भ में ApplicationDbContext बदलें।

मुझे यह मुद्दा था और यह पता चला कि एक परियोजना एसक्यूएलएक्सप्रेस की तरफ इशारा कर रही थी लेकिन समस्या वाला एक लोकलडीबी को इंगित कर रहा था। (अपने संबंधित web.config में)। बेवकूफ निरीक्षण लेकिन यहाँ पर ध्यान देने योग्य कोई बात इस मामले में समस्या निवारण के मामले में है।

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

मैं Database.CompatibleWithModel विधि (EF5 में उपलब्ध) का उपयोग करने के लिए परीक्षण करने के लिए अगर मॉडल और डीबी मैच इससे पहले कि मैं इसका इस्तेमाल करता हूं। मैं संदर्भ बनाने के बाद इस विधि को कॉल करता हूं …

  // test the context to see if the model is out of sync with the db... if (!MyContext.Database.CompatibleWithModel(true)) { // delete the old version of the database... if (File.Exists(databaseFileName)) File.Delete(databaseFileName); MyContext.Database.Initialize(true); // re-populate database } 

इसका अर्थ है कि संदर्भ पर कुछ बदलाव किए गए हैं जिन्हें निष्पादित नहीं किया गया है। कृपया परिवर्तनों को हमने जेनरेट करने के लिए पहले ऐड-माइग्रेशन को चलाएं (परिवर्तन जो हमें अवगत नहीं हैं) और फिर अपडेट-डाटाबेस चलाएं

मुझे एक ही समस्या थी जब हमने दो अनुप्रयोगों के लिए एक डाटाबेस का उपयोग किया था disableDatabaseInitialization="true" संदर्भ प्रकार अनुभाग में मेरे लिए काम करता है

 <entityFramework> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> <contexts> <context type="PreferencesContext, Preferences" disableDatabaseInitialization="true"> <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[PreferencesContext, Preferences], [Migrations.Configuration, Preferences]], EntityFramework" /> </context> </contexts> 

अधिक जानकारी के लिए https://msdn.microsoft.com/en-us/data/jj556606.aspx देखें

इस विषय पर कुछ शोध के बाद, मुझे पता चला कि त्रुटि मूल रूप से हुई है यदि आपके पास पहले से स्थानीय एसक्यूएल सर्वर एक्सप्रेस में बनाया गया डीबी का एक उदाहरण है। इसलिए जब भी आपके पास डीबी पर अद्यतन हैं और Package Manager Console का उपयोग कर Update Database कमांड को चलाने के बिना डीबी / कुछ कोड को चलाने की कोशिश Package Manager Console ; सबसे पहले, आपको अपने स्थानीय एसक्यूएल पर पिछले डीबी को स्वयं मैन्युअल रूप से हटा देना होगा।

इसके अलावा, यह समाधान तब तक काम करता है जब तक आपके पास AutomaticMigrationsEnabled = false; आपके कॉन्फ़िगरेशन में

यदि आप वर्जन कंट्रोल सिस्टम (जीआईटी, एसवीएन, इत्यादि) के साथ काम करते हैं और कुछ अन्य डेवलपर्स को उत्पादन चरण में डीबी ऑब्जेक्ट्स को अपडेट करते हैं, तो यह त्रुटि बढ़ती है जब भी आप अपना कोड बेस अपडेट करते हैं और एप्लिकेशन को चलाते हैं

जैसा कि ऊपर बताया गया है, कोड आधार पर इसके लिए कुछ समाधान हैं। हालांकि, कुछ मामलों में यह सबसे व्यावहारिक है।

मैं प्रो asp.NET mvc 4 पुस्तक को भी पढ़ रहा हूं, और उसी समस्या में गया जो आपने किया था। मेरे लिए, मैंने पुस्तक के 'मॉडल वैल्यूडिंग जोड़ना' खंड में निर्धारित परिवर्तन करने के बाद समस्या शुरू कर दी। जिस तरह से मैंने इस समस्या का समाधान किया, मेरे डेटाबेस को स्थानीय डीबी से पूर्ण विकसित SQL सर्वर 2012 सर्वर पर ले जाने के लिए है। (बीटीडब्लू, मुझे पता है कि मैं भाग्यशाली हूं, मैं पूर्ण विकसित संस्करण पर स्विच कर सकता हूं, इसलिए मुझसे नफरत नहीं कर सकता। ;-))) इस समस्या के कारण डीबी को संचार के साथ कुछ होना चाहिए।

निम्न चरणों की जांच करें

  1. Database.SetInitializer (शून्य); -> ग्लोबल.एएसएक्स। सीएस में

2।

  1. आपके संदर्भ वर्ग के नाम को जांचना चाहिए

संशोधित करें Global.asax.cs , जिसमें Application_Start ईवेंट शामिल है:

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

यह त्रुटि आपकी कनेक्शन स्ट्रिंग के साथ एक समस्या को इंगित कर सकती है और क्या आपका कनेक्शन स्ट्रिंग नाम डेटाबेस संदर्भ घोषणा से मेल खाता है।

मुझे यह त्रुटि थी क्योंकि मैंने स्थानीय डेटाबेस को गलत तरीके से (मूर्खतापूर्ण गलती) नाम दिया था और "DefaultConnection" के web.config में कनेक्शन स्ट्रिंग का नाम MyDbContext से मेल नहीं खा रहा था

 public MyDbContext(): base("DefaultConnection") {} <connectionStrings> <add name="DefaultConnection" ... </connectionStrings> 

डेटाबेस SetInitializer का प्रयोग करने का प्रयास करें जो System.Data.Entity का उपयोग कर रहा है;

Global.asax में

 protected void Application_Start() { Database.SetInitializer(new DropCreateDatabaseIfModelChanges<yourContext>()); } 

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

सीडिंग ::

 protected void Application_Start() { Database.SetInitializer(new AddressBookInitializer()); ----rest code--- } public class AddressBookInitializer : DropCreateDatabaseIfModelChanges<AddressBook> { protected override void Seed(AddressBook context) { context.yourmodel.Add( { }); base.Seed(context); } } 

यह अजीब है, लेकिन यहां सभी उत्तर बेकार थे मेरे लिए मेरे लिए प्रारंभिक काम किया

MigrateDatabaseToLatestVersion

यह मेरा समाधान है (मुझे पता है, यह बहुत आसान हो सकता है, लेकिन मैं इसे कैसे उपयोग करता हूं):

 class MyDbMigrateToLatest : MigrateDatabaseToLatestVersion<MyDbContext, Configuration> { } public class MyDbContext: DbContext { public MyDbContext() : base("DbName") { SetInitializer(); } public MyDbContext(string connString) : base(connString) { SetInitializer(); } private static void SetInitializer() { if (ConfigurationManager.AppSettings["RebuildDatabaseOnStart"] == "true") Database.SetInitializer(new MyDbInitializerForTesting()); else Database.SetInitializer(new MyDbMigrateToLatest()); } } public sealed class Configuration : DbMigrationsConfiguration<MyDbContext> { public Configuration() { AutomaticMigrationsEnabled = true; } protected override void Seed(MyDbContext context) { // Whatever } } 

MyDbInitializerForTesting बस DropCreateDatabaseAllways से विरासत में मिली है इसलिए कुछ विशिष्ट मामले में (परीक्षण), पूरे डेटाबेस rebuilded है अन्यथा यह नवीनतम संस्करण में माइग्रेट हो गया है।

मेरा स्रोत: https://msdn.microsoft.com/en-us/data/jj591621.aspx#specific

अच्छा सुझाव, हालांकि, सभी मामलों में एनटी इतना सटीक है मैं एक बाहर आंकड़ा कृपया आपको यह सुनिश्चित करने की ज़रूरत है कि आप विज़ुअल स्टूडियो में प्रधानमंत्री खिड़कियों का उपयोग करके "सक्रिय-माइग्रेशन" चलाते हैं, और माइग्रेशन फ़ोल्डर आपको प्रोजेक्ट में जोड़ दिया जाएगा।

सुनिश्चित करें कि फ़ोल्डर में जोड़े गए दो सी # वर्ग फ़ाइलों में आपके सभी मॉडल और उनके संबंधित गुण शामिल होंगे।

यदि आपके पास समाधान है, और तैनाती के लिए प्रकाशन का निर्माण करने वाले सभी हैं

तर्क यह है कि मौजूदा मेटाडेटा को ओवरराइट नहीं किया जा सकता है क्योंकि आपके ऐप में मौजूदा को बदलने के लिए कोई मेटाडेटा नहीं है। परिणामस्वरूप आपको यह त्रुटि मिल रही है "डेटाबेस का निर्माण करने के बाद से संदर्भ का समर्थन करने वाला मॉडल बदल गया है"

बस में किसी के रूप में मेरा ही परिदृश्य है।

मेरे डेटाबेस में पहले ईएफ है और उसी समय asp.net पहचान का उपयोग करते हुए

इसलिए मेरे पास दो कनेक्शन हैं, मेरे वेब कॉन्फ़िगर में स्ट्रिंग्स, और उसमें कोई समस्या नहीं है ऐसा हुआ कि मैंने स्क्रिप्ट को मैन्युअल रूप से asp.net पहचान तालिकाओं को उत्पन्न करने / चलाने के लिए बनाया / चलाया जो मुझे नहीं चाहिए।

इसलिए DROP को मैन्युअल रूप से / स्क्रिप्ट से मैन्युअल रूप से बनाए गए सभी asp.net पहचान तालिकाओं के अनुसार।

 DROP TABLE __MigrationHistory DROP TABLE AspNetRoles DROP TABLE AspNetUserClaims DROP TABLE AspNetUserLogins DROP TABLE AspNetUserRoles DROP TABLE AspNetUsers 

इनमें से कोई भी समाधान हमारे लिए काम नहीं करेगा (स्कीमा पूरी तरह से अक्षम करने के अलावा) अंत में हमारे न्यूटोनसफ्ट जेएसन के हमारे संस्करण में एक मिस-मैच था

हमारे AppConfig को सही ढंग से अपडेट नहीं किया गया था:

 <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" /> </dependentAssembly> 

इसका हल हम असेंबली संस्करण को वास्तव में तैनात कर रहे थे

 <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="10.0.0.0" /> </dependentAssembly> 

यहां मैं एक और विधि साझा करना चाहता हूं जो मॉडल बैकिंग की त्रुटि को रोकते हैं जब संदर्भ बदल जाता है:

1) अपने DbContext फ़ाइल को खोलें

2) माइक्रोसॉफ्ट का इस्तेमाल करते हुए नामस्थान जोड़ें। एस्पनेट। आईडेंटीटी। एंटीटीफ़्रेमवर्क;

3) पब्लिक माइडबॉन्टेक्स्ट (): बेस ("name = MyDbContext") {Database.SetInitializer (नया DropCreateDatabaseAlways ()); }