डेटाबेस बनाने के बाद से 'ApplicationDbContext' संदर्भ का मॉडल बदल गया है


85

सबसे पहले, मैंने इस त्रुटि को कहीं और नहीं देखा है और मुझे लगता है कि यह एक प्रतिकृति नहीं है इसलिए कृपया पहले पूरी स्थिति पढ़ें।

सब कुछ ठीक काम कर रहा था, तब मैंने अपनी एक मॉडल क्लास ( ऐप क्लास और अपडेट अब टिप्पणी छोड़ दी है) को अपडेट करने की कोशिश की, जिसे मैं नीचे सूचीबद्ध करूंगा; और बूम मैं इस बदसूरत त्रुटि थी।


डेटाबेस बनाने के बाद से 'ApplicationDbContext' संदर्भ का मॉडल बदल गया है। डेटाबेस को अपडेट करने के लिए कोड फर्स्ट माइग्रेशन का उपयोग करने पर विचार करें ( http://go.microsoft.com/fwlink/?LinkId=238264 )। System.Data.Entity.CreateDatabaseIfNotExists पर 1.InitializeDatabase(TContext context) at System.Data.Entity.Internal.InternalContext.<>c__DisplayClassf1.b__e () System.Data.Entity.Internal.InternalContext.PerformInitializationAction (Action क्रिया) System.Data.Entity.InternalContext.PerformDatabaseIncatification (?) पर करें। System.Data.Entity.Internality.Inntity.Internize.online.online.b__4 पर (SystemContext c) System.Data.Entity.Internal.RetryAction 1.PerformAction(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action1 क्रिया पर System.Data.Entity.Internal.LazyInternalCettext.InitializeDatabase () पर System.Data.Entity.InternalContext UnitType) System.Data.Entity.Internal.Linq.InternalSet पर1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet1.Include (String path) System.Data.Entity.Infrastructure.DbQuery 1.Include(String path) at System.Data.Entity.QueryableExtensions.Include[T](IQueryable1 स्रोत, String path) पर System.Data.Entity.QueryableExtensions.Include [T, TProtyty] (IQueryable 1 source, Expression1 path) Microsoft.AspNet.Identity पर। EntityFramework.UserStore 6.GetUserAggregateAsync(Expression1 फ़िल्टर) Microsoft.AspNet.Identity.EntityFramework.UserStore 6.FindByNameAsync(String userName) at Microsoft.AspNet.Identity.UserManager2.FindByNameAsync (स्ट्रिंग उपयोगकर्ता नाम) पर Microsoft.AspNet.Ifentity.UserManager`2.d__12.MoveNext () --- पिछले स्थान से स्टैक ट्रेस का अंत। अपवाद फेंक दिया गया था --- System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (टास्क टास्क पर) System.Runtime.CompilerServices.TaskAwaiter.HandleNon.uccessAndDebuggerNotification (कार्य कार्य) ControlPanel.Web.Controllers.Acrollers पर। : \ Projects \ FULL \ Control पैनल \ ControlPanel.Web \ Controllers \ AccountController.cs: पिछले 56

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

update-database -force -verbose

जब भी मैं अपनी साइट पर लॉग इन करने की कोशिश करता हूं, तो मुझे कोई शिकायत नहीं होती है। मैंने समस्या को हल किए बिना दस बार प्रवास की बात की।

यहाँ मेरे डोमेन वर्ग (मॉडल) हैं:

public class App
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual int AppId { get; set; }
    //[Required]
    public virtual string FacebookId { get; set; }
    //[Required]
    public virtual string Secret { get; set; }      
    public virtual List<User> Users { get; set; }
    public virtual List<Post> Posts { get; set; }      
    //public virtual ApplicationUser Admin { get; set; }
}

public class Post
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual int PostId { get; set; }
    public virtual string Content { get; set; }
    public virtual string Link { get; set; }
    public virtual string Image { get; set; }
    public virtual bool IsSpecial { get; set; }
    //[Required]
    public virtual App App { get; set; }
    //[Required]
    public virtual DateTime? PublishDate { get; set; }
}

public class User
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual int UserId { get; set; }

    [MaxLength(500)]
    public virtual string FacebookId { get; set; }

    [MaxLength(500)]
    public virtual string Token { get; set; }

    //[Required]
    public virtual App App { get; set; }
}

यहाँ मेरे IdentityModels हैं:

public class ApplicationUser : IdentityUser
{
    public virtual List<App> Apps { get; set; }
    public bool? IsPremium { get; set; }
    [DataType(DataType.Date)]
    public DateTime? LastPublishDateTime { get; set; }
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("dCon")
    {
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<IdentityUser>().ToTable("Admins");
        modelBuilder.Entity<ApplicationUser>().ToTable("Admins");
        modelBuilder.Entity<IdentityUserRole>().ToTable("AdminRoles");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("Logins");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("Claims");
        modelBuilder.Entity<IdentityRole>().ToTable("Roles");
    }
}

क्या आप वाकई इस समस्या को कहीं और नहीं देख रहे हैं? इस लिंक के बारे में क्या? stackoverflow.com/questions/3600175/…
आंद्रेक्रूज़

4
नहीं, वे वही नहीं हैं जो मैं आपको आश्वासन दे सकता हूं ,, मैंने कोशिश की है कि वहां कोई भी परिणाम उपलब्ध न हो। उनकी त्रुटि है: या तो डेटाबेस मैन्युअल रूप से डिलीट / अपडेट करें, जबकि मेरा कहना है: कोड फर्स्ट माइग्रेशन का उपयोग करने पर विचार करें डेटाबेस को अपडेट करने के लिए
a7madx7

जवाबों:


140

बस के मामले में किसी और को इस पर ठोकर खाई है कि मेरे जैसे एक डेटाबेस पहले कार्यान्वयन कर रहा था।

मैंने तालिका में ApplicationUserएक नया क्षेत्र जोड़ते हुए, कक्षा को बढ़ाकर AspNetUsersऔर फिर स्टार्टअप पर यह त्रुटि की थी।

मैं __MigrationHistoryतालिका में बनाए गए रिकॉर्ड को हटाकर इसे हल करने में सक्षम था (वहां केवल एक रिकॉर्ड था) मुझे लगता है कि ईएफ ने फैसला किया कि मुझे माइग्रेशन टूल का उपयोग करके अपने डेटाबेस को अपडेट करने की आवश्यकता है - लेकिन मैंने पहले ही यह मैन्युअल रूप से स्वयं किया था।


1
डेटाबेस पहले और साथ ही यह तय किया। एकमात्र रिकॉर्ड वहाँ प्रारंभिक था जो पहले कोड होता था, लेकिन मैंने इसे पहले डेटाबेस का उपयोग करने और एमएस SQL ​​सर्वर में तालिका बदलने के बाद संशोधित किया।
सॉलिडस्नेक4444

काम किया। मुझे एक मचान दृश्य जोड़ते समय त्रुटि हुई। दृश्य का डेटा संदर्भ वर्ग थाApplicationDbContext
विन्सेन्ट सेजलर

78

यह मेरे लिए काम करता है - कोई अन्य परिवर्तन की आवश्यकता नहीं है।

DELETE FROM [dbo].[__MigrationHistory]

1
मेरे लिए भी काम किया। बहुत अजीब तय है। मुझे लगता है, इतिहास में एक टूटा हुआ प्रवास था। मैं सभी माइग्रेशन को हटाने और एक बार फिर से शुरुआती बनाने की कोशिश करूंगा।
हांक

1
@ क्या आप इस एसक्यूएल को सीधे SSMS में चला सकते हैं
डैनियल डे

1
मेरे लिए भी काम किया। एक डेटाबेस में यह तालिका मौजूद थी जबकि यह एक अन्य डेटाबेस में मौजूद थी
तेजस

1
ऊपर दिए गए उत्तर मेरी मदद नहीं कर सकते क्योंकि मेरे कोड अंतिम मॉडल अपडेट तक ठीक चल रहे थे। आपके उत्तर ने चाल चली। चियर्स मैन!!
सिथू

3
यह मेरे लिए काम नहीं करता है, और मुझे db को हटाने, माइग्रेशन को फिर से चलाने और डेटा को फिर से जोड़ने की आवश्यकता है। सावधान।
एडमोंस्टैक

35

इस पोस्ट ने मेरा मुद्दा ठीक कर दिया। यह निम्नलिखित पंक्ति को जोड़ने के बारे में Application_Start()है Global.asax:

Database.SetInitializer<Models.YourDbContext>(null);

हालाँकि यह आपके मॉडल में प्रत्येक संपादन के लिए डेटाबेस मनोरंजन का कारण बनता है और आप अपने डेटा को ढीला कर सकते हैं।


4
मैं नहीं चाहता कि मेरा डेटा खराब हो या नुकसान हो।
रूहुल्लाह अल्मेल ने

सबसे अच्छा तरीका नहीं सर। समाधान लेकिन विश्वसनीय नहीं है
अहसान आफताब

13

यदि आप अपने "डेटाबेस> सिस्टम टेबल्स" से "[__MigrationHistory]" तालिका हटाते हैं तो यह काम करेगा।


यह काम करता हैं। लेकिन [__MigrationHistory] टेबल को हटाने के बाद बस EDMX mmodel को भी अपडेट करें।
दिमित्रीब्यो

12

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


12

इस त्रुटि से हर किसी को सिरदर्द हो रहा है: सुनिश्चित करें कि आपके सभी प्रॉजेक्ट्स में एक ही एंटिटी फ्रेमवर्क असेंबली का संदर्भ है।

छोटी कहानी लंबी:

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


हाँ, यह मेरा मामला था, अधिकांश प्रोजेक्ट्स एफई ६.१.३ के साथ थे, जबकि नव निर्मित परीक्षण परियोजना किसी भी तरह ६ एफ ६.० के साथ थी।
ZZZ

7

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

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

WebApi का अनुरोध करने पर मुझे यह त्रुटि मिली ...

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

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

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

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

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

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

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

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

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

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

3

यह तब हो सकता है जब आप किसी मॉडल प्रॉपर्टी के डेटा एनोटेशन को बदलते हैं। उदाहरण के लिए: एक संपत्ति में [आवश्यक] जोड़ने से डेटाबेस डिजाइन में एक लंबित परिवर्तन होगा।

पैकेज मैनेजर कंसोल पर चलने के लिए सबसे सुरक्षित समाधान है:

add-migration myMirgrationName

जो अप () पद्धति में सटीक परिवर्तन प्रदर्शित करेगा। इसलिए, आप तय कर सकते हैं कि क्या आप वास्तव में इस तरह के बदलाव लागू करना चाहते हैं:

update-database

अन्यथा, आप केवल __MigrationHistory टेबल से और माइग्रेशन फ़ोल्डर से समाधान एक्सप्लोरर के नवीनतम माइग्रेशन को हटा सकते हैं।


यह निश्चित रूप से सबसे अच्छा जवाब है जो मैंने यहां देखा है। माइग्रेशन हिस्ट्री डिलीट करने का सुझाव मेरी राय में बहुत बुरा विचार है!
23

आपके कमेंट के लिए धन्यवाद। मैं आमतौर पर माइग्रेशन इतिहास को हटाने की सलाह नहीं देता, लेकिन विशेष रूप से, पिछले माइग्रेशन पॉइंट बहुत अलग नहीं थे - यानी ओपी द्वारा कोई भी मॉडल संशोधन नहीं हुआ था - इसलिए मुझे लगा कि एक कदम पीछे हटने में मदद मिल सकती है , केवल बहुत ही अंतिम माइग्रेशन (रिकॉर्ड) को हटाकर।
मोहम्मद नगीब

2

मुझे a7madx7 के समान समस्या हो रही थी, लेकिन EF (v6.1.1) की स्थिर रिलीज के साथ, और इसमें पाया गया रिज़ॉल्यूशन निम्न में पोस्ट किया गया:

http://cybarlab.com/context-has-changed-since-the-database-was-created

विविधता में: http://patrickdesjardins.com/blog/the-model-backing-the-context-has-changed-since-the-database-was-created-ef4-3

2 लिंक में VB के लिए विशिष्ट उल्लेख शामिल है ..... "आप बस इस तरह से global.asax फ़ाइल में आपके app_start पद्धति पर यह समस्या होने वाले सभी डेटाबेसकोटेक्स्ट जोड़ सकते हैं" :

Database.SetInitializer(Of DatabaseContext)(Nothing)

नायब: मुझे "डेटाबेसकोटेक्स्ट" को मेरी कक्षा के नाम के साथ लागू करना था, जो डीबीसीकोटेक्स्ट को लागू कर रहा था

अद्यतन: इसके अलावा, मौजूदा तालिकाओं से कनेक्ट करने के लिए कोडफ़र्स्ट दृष्टिकोण का उपयोग करते समय, डेटाबेस को यह देखने के लिए जांचें कि क्या ईएफ़ ने मैपिंग को संग्रहीत करने के लिए "_mhhhhhhhhith" "तालिका बनाई है या नहीं। मैंने इस तालिका को फिर से नाम दिया था।


2

बस अपने डेटाबेस में माइग्रेशन हिस्ट्री में माइग्रेशन हिस्ट्री डिलीट करें। इसने मेरे लिए काम किया


1

मैंने वेबसाइट फ़ोल्डर की सभी फ़ाइलों को हटाकर एक समान समस्या को हल किया और फिर इसे पुनः प्रकाशित किया।


1

सभी तालिकाओं की पहचान निकालें

Delete _MigrationHistory
Delete AspNetRoles
Delete AspNetUserClaims
Delete AspNetUserLogins
Delete AspNetRoles
Delete AspNetUser

1

टूल मेनू से, NuGet Package Manger पर क्लिक करें, फिर पैकेज मैनेजर कंसोल (PMC) पर क्लिक करें। पीएमसी में निम्नलिखित कमांड दर्ज करें।

सक्षम करें-माइग्रेशन ऐड-माइग्रेशन इनिट अपडेट-डेटाबेस एप्लिकेशन को चलाएं। समस्या का समाधान यहीं से है


1

जब मैं विकसित हो रहा हूं, तो माइग्रेशन को कॉन्फ़िगर करने के लिए मैं इस व्यावहारिक वर्ग का उपयोग करना पसंद करता हूं।

आशा करता हूँ की ये काम करेगा।

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
        this.Configuration.LazyLoadingEnabled = false;
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
        modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();

        Database.SetInitializer(new StackOverflowInitializer());
    }

    public class StackOverflowInitializer : DropCreateDatabaseIfModelChanges<ApplicationDbContext>
    {
        public StackOverflowInitializer()
        {
            // TODO NOTHING, COMMENT ALL

            // IF CHANGES, RECREATE
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<ApplicationDbContext>());

            // CREATE ONLY NOT EXITS
            //Database.SetInitializer<Context>(new CreateDatabaseIfNotExists<ApplicationDbContext>());
        }

    }

    public System.Data.Entity.DbSet<stackoverflow.Models.Company> Companies { get; set; }

}

0

पुराने उत्पाद के साथ [__MigrationHistory] तालिका में पंक्तियों को हटाना मेरे लिए काम करता है। यह उत्तर उन लोगों के लिए है जो संपूर्ण [__MigrationHistory] तालिका को हटाना नहीं चाहते हैं। बस ProductVersion कॉलम में पुराने संस्करण वाली पंक्तियों को हटा दें। आशा है कि यह कुछ मदद करता है!


0

नीचे उसी तरह की त्रुटि थी जिसका मैं सामना कर रहा था

डेटाबेस बनाने के बाद से 'PsnlContext' संदर्भ का मॉडल बदल गया है। डेटाबेस को अपडेट करने के लिए कोड फर्स्ट माइग्रेशन का उपयोग करने पर विचार करें ( http://go.microsoft.com/fwlink/?LinkId=238264 )।

मैंने त्रुटि को हल करने के लिए Global.asax के एप्लिकेशन स्टार्ट इवेंट में नीचे का खंड जोड़ा

Database.SetInitializer (null);

यह मुद्दा तय किया


0

बस त्रुटि का मतलब है कि आपके मॉडल में परिवर्तन हैं और DB के साथ सिंक में नहीं है, इसलिए पैकेज मैनेजर कंसोल पर जाएं, add-migration foo2 इससे संकेत मिलेगा कि समस्या क्या है, क्या आपको कुछ हटाया जा सकता है या मेरे मामले में मैं डेटा एनोटेशन निकाल सकता हूं । वहां से आप परिवर्तन प्राप्त कर सकते हैं और उम्मीद है कि इसे अपने मॉडल में उलट देंगे।

इसके बाद foo2 को डिलीट करें।


0

मुझे पता है कि मुझे बहुत देर हो चुकी है, लेकिन मैं भी योगदान देना चाहता हूं। यह त्रुटि वास्तव में अजीब है, क्योंकि ब्राउज़र समझ नहीं पा रहा है कि परिवर्तनों को कैसे प्रस्तुत किया जाना चाहिए क्योंकि कक्षाएं और उनके गुण बदल गए होंगे, लेकिन डेटाबेस के लिए प्रतिबद्ध नहीं होंगे।

तो एक काम करो,

इस कमांड का उपयोग करके पैकेज मैनेजर कंसोल (टूल> नुगेट पैकेज मैनेजर> पैकेज मैनेजर कंसोल) में एक माइग्रेशन बनाएं :

अपडेट-माइग्रेशन अपडेट माइग्रेशन

जहां अद्यतन माइग्रेशन आपके माइग्रेशन का नाम है। आप इसे अपनी पसंद का कोई भी नाम दे सकते हैं लेकिन कृपया विशिष्ट रहें।

उसके बाद, हमें केवल डेटाबेस को अपडेट करने की आवश्यकता है, इसलिए इसे चलाएं:

डेटाबेस अद्यतन करें

अब जब आपने डेटाबेस में अपने परिवर्तन कर लिए हैं, तो बस अपने ब्राउज़र को रीफ़्रेश करें और वहाँ जाएँ!

उम्मीद है की यह मदद करेगा।


0

यह इसलिए आता है क्योंकि आप अपने किसी मॉडल में कुछ संपत्ति जोड़ते हैं और आपने नहीं की update-Database। इस को हल करने के आप मॉडल से निकालने के लिए है या आप के लिए है add-migration anyProperName कि गुण और साथ Update-database


0

यह त्रुटि मुझे तब हुई जब मैंने अपने मॉडल में परिवर्तन किए और डेटाबेस को अपडेट करने के लिए परिवर्तनों के लिए माइग्रेशन नहीं किया।

यदि आपने कभी कोड फर्स्ट माइग्रेशन स्कीमा में अपने मॉडल में परिवर्तन किया है

माइग्रेशन जोड़ना न भूलें

add-migration UpdatesToModelProperites 

उपरोक्त कमांड मॉडल में आपके द्वारा किए गए सभी परिवर्तनों को पढ़ेगा और इसे अप () और डाउन () विधियों में लिखेगा।

फिर बस नीचे कमांड का उपयोग करके अपने डेटाबेस को अपडेट करें।

update-database

यह मेरे लिए क्या काम करता है।


-2

मौजूदा डीबी हटाएं, एक ही नाम से नया डीबी बनाएं, सभी डेटा को कॉपी करें ... यह काम करेगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.