โมเดลที่สำรองบริบท 'ApplicationDbContext' มีการเปลี่ยนแปลงตั้งแต่สร้างฐานข้อมูล


86

ก่อนอื่นฉันไม่เห็นข้อผิดพลาดนี้ที่อื่นและฉันคิดว่าไม่ใช่การจำลองแบบดังนั้นโปรดอ่านสถานการณ์ทั้งหมดก่อน

ทุกอย่างทำงานได้ดีจากนั้นฉันพยายามอัปเดตคลาสโมเดลหนึ่งของฉัน ( คลาสแอพและการอัปเดตจะแสดงความคิดเห็น) ซึ่งฉันจะแสดงรายการด้านล่าง และบูมฉันมีข้อผิดพลาดที่น่าเกลียดนี้


โมเดลที่สำรองบริบท 'ApplicationDbContext' มีการเปลี่ยนแปลงตั้งแต่สร้างฐานข้อมูล พิจารณาใช้ Code First Migrations เพื่ออัปเดตฐานข้อมูล ( http://go.microsoft.com/fwlink/?LinkId=238269 ) ใน System.Data.Entity.CreateDatabaseIfNotExists 1.InitializeDatabase(TContext context) at System.Data.Entity.Internal.InternalContext.<>c__DisplayClassf1.b__e () ที่ System.Data.Entity.Internal.InternalContext.PerformInitializationAction (การดำเนินการดำเนินการ) ที่ System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization () ที่ System.Data.Entity Internal.LazyInternalContext.b__4 (InternalContext c) ที่1.PerformAction(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(ActionการดำเนินการSystem.Data.Entity.Internal.RetryAction 1) ที่ System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase () ที่ System.Data.Entity.Internal.InternalContext entityType) ที่ System.Data.Entity.Internal.Linq.InternalSet1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet1. รวม (เส้นทางสตริง) ที่ System.Data.Entity.Infrastructure.DbQuery 1.Include(String path) at System.Data.Entity.QueryableExtensions.Include[T](IQueryable1 source, String path) ที่ System.Data.Entity.QueryableExtensions รวม [T, TProperty] (IQueryable 1 source, Expression1 พา ธ ) ที่ Microsoft.AspNet.Identity EntityFramework.UserStore 6.GetUserAggregateAsync(Expression1 filter) ที่ Microsoft.AspNet.Identity.EntityFramework.UserStore 6.FindByNameAsync(String userName) at Microsoft.AspNet.Identity.UserManager2.FindByNameAsync (String userName) ที่ Microsoft.AspNet.Identity.UserManager`2.d__12.MoveNext () --- สิ้นสุดการติดตามสแต็กจากตำแหน่งก่อนหน้าโดยที่ ข้อยกเว้นถูกโยนทิ้ง - ที่ System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (งานภารกิจ) ที่ System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (งานภารกิจ) ที่ ControlPanel.Web.Controllers.AccountController.d__2.MoveNext () ใน d : \ Projects \ FULL \ Control Panel \ 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/…
AndreCruz

4
ไม่พวกเขาไม่เหมือนกันฉันสามารถรับรองได้ฉันได้ลองวิธีแก้ปัญหาแล้วโดยไม่มีผลลัพธ์เลยข้อผิดพลาดของพวกเขาระบุว่า: ลบ / อัปเดตฐานข้อมูลด้วยตนเองในขณะที่ของฉันบอกว่า: พิจารณาใช้ Code First Migrations เพื่ออัปเดตฐานข้อมูล
a7madx7

คำตอบ:


141

ในกรณีที่คนอื่นสะดุดกับสิ่งนี้ซึ่งกำลังดำเนินการใช้ฐานข้อมูลครั้งแรกเหมือนฉัน

ฉันทำการเปลี่ยนแปลงโดยการขยายApplicationUserชั้นเรียนเพิ่มเขตข้อมูลใหม่ในAspNetUsersตารางแล้วพบข้อผิดพลาดนี้เมื่อเริ่มต้น

ฉันสามารถแก้ไขปัญหานี้ได้โดยการลบบันทึกที่สร้างใน__MigrationHistoryตาราง (มีเพียงบันทึกเดียวที่นั่น) ฉันถือว่า EF ตัดสินใจว่าฉันจำเป็นต้องอัปเดตฐานข้อมูลโดยใช้เครื่องมือการย้ายข้อมูล - แต่ฉันได้ดำเนินการด้วยตนเองแล้ว


1
ฐานข้อมูลก่อนเช่นกันและสิ่งนี้ได้รับการแก้ไขแล้ว เร็กคอร์ดเดียวที่มีคือการสร้างครั้งแรกซึ่งเกิดโค้ดขึ้นก่อน แต่ฉันแก้ไขหลังจากใช้ฐานข้อมูลก่อนและเปลี่ยนตารางในเซิร์ฟเวอร์ MS SQL
SolidSnake4444

ทำงานแล้ว ฉันได้รับข้อผิดพลาดเมื่อเพิ่มมุมมองนั่งร้าน คลาสบริบทข้อมูลของมุมมองคือApplicationDbContext
Vincent Saelzler

79

สิ่งนี้ใช้ได้ผลสำหรับฉัน - ไม่จำเป็นต้องมีการเปลี่ยนแปลงอื่น ๆ

DELETE FROM [dbo].[__MigrationHistory]

1
ทำงานให้ฉันด้วย การแก้ไขที่แปลกมาก ฉันคิดว่ามีการอพยพที่ไม่สมบูรณ์ในประวัติศาสตร์ ฉันจะพยายามลบการย้ายข้อมูลทั้งหมดและสร้างครั้งแรกอีกครั้ง
hakan

1
@Dave Voyles คุณสามารถเรียกใช้ SQL นี้ได้โดยตรงใน SSMS
Daniel de Zwaan

1
ทำงานให้ฉันด้วยในฐานข้อมูลเดียวตารางนี้มีอยู่ในขณะที่มีอยู่ในฐานข้อมูลอื่น
Tejas

1
คำตอบด้านบนไม่สามารถช่วยฉันได้เนื่องจากรหัสของฉันทำงานได้ดีจนถึงการอัปเดตรุ่นล่าสุด คำตอบของคุณเป็นเคล็ดลับ ไชโย !!
Sithu

3
สิ่งนี้ไม่ได้ผลสำหรับฉันและทำให้ฉันต้องลบฐานข้อมูลเรียกใช้การย้ายข้อมูลอีกครั้งและเพิ่มข้อมูลอีกครั้ง ระวัง.
adamonstack

35

โพสต์นี้แก้ไขปัญหาของฉัน ทุกอย่างเกี่ยวกับการเพิ่มบรรทัดต่อไปนี้Application_Start()ในGlobal.asax:

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

อย่างไรก็ตามจะทำให้เกิดฐานข้อมูลสำหรับการแก้ไขทุกครั้งในโมเดลของคุณและคุณอาจสูญเสียข้อมูลของคุณ


4
ฉันไม่ต้องการให้ข้อมูลของฉันเสียหายหรือสูญหาย
Roohullah Allem กล่าว

ไม่ใช่แนวทางที่ดีที่สุด วิธีแก้ปัญหา แต่ไม่น่าเชื่อถือ
Ahsan Aftab

14

หากคุณลบตาราง "[__MigrationHistory]" ออกจาก "ฐานข้อมูล> ตารางระบบ" ก็จะใช้งานได้


มันได้ผล. แต่หลังจากลบ[__MigrationHistory] ตารางแล้วให้อัปเดต EDMX mmodel ด้วย
DmitryBoyko

12

มันเป็นข้อผิดพลาดที่แปลกประหลาดไม่ใช่ข้อผิดพลาดของฉันในตอนท้ายมันเป็นของ Microsoft ฉันติดตั้งกรอบเอนทิตีในเวอร์ชัน "ก่อนวางจำหน่าย" และต้องรับผิดชอบต่อข้อผิดพลาดนี้เมื่อฉันอัปเกรดเป็นเวอร์ชันเสถียร ปล่อยมันหายไปขอบคุณทุกคนเชื่อฉันเมื่อฉันถามคำถามนี้ฉันค้นหาวิธีแก้ปัญหาประมาณหนึ่งสัปดาห์ดังนั้นฉันค่อนข้างแน่ใจว่าปัญหานี้ไม่ได้อยู่ที่อื่น: รุ่นของ entity framework.dll ที่ทำให้เกิด ปัญหาคือ 6.0.2 หากช่วยได้


12

ทุกคนกำลังปวดหัวจากข้อผิดพลาดนี้: ตรวจสอบให้แน่ใจว่า projetcs ทั้งหมดของคุณมีการอ้างอิงถึงชุดประกอบ Entity Framework เดียวกัน

เรื่องสั้นยาว:

โมเดลของฉันและแอปพลิเคชันของฉันอยู่ในชุดประกอบที่ต่างกัน แอสเซมบลีเหล่านี้อ้างอิงถึงเอนทิตีเฟรมเวิร์กเวอร์ชันอื่น ฉันเดาว่าทั้งสองเวอร์ชันสร้าง id ที่แตกต่างกันสำหรับ modell เดียวกัน ดังนั้นเมื่อแอปพลิเคชันของฉันเรียกใช้ id ของโมเดลไม่ตรงกับการย้ายข้อมูลล่าสุดใน __MigrationHistory หลังจากอัปเดตการอ้างอิงทั้งหมดไปยัง EF รุ่นล่าสุดข้อผิดพลาดจะไม่ปรากฏขึ้นอีกเลย


ใช่นั่นเป็นกรณีของฉันโครงการส่วนใหญ่ใช้ ef6.1.3 ในขณะที่โครงการทดสอบที่สร้างขึ้นใหม่ใช้ ef6.0
ZZZ

7

ฉันใช้เวลาหลายวันในการแก้ปัญหานี้วิเคราะห์โพสต์ต่างๆมากมายและลองใช้ตัวเลือกมากมายและในที่สุดก็ได้รับการแก้ไข 2 โครงการนี้ในโซลูชันของฉันโดยใช้การย้ายรหัส EF ครั้งแรก:

  • แอปพลิเคชันคอนโซล "DataModel" ซึ่งส่วนใหญ่ใช้เป็นแอสเซมบลีซึ่งมีเอนทิตีรหัสแรกของฉันทั้งหมด DbContext Mirgations และที่เก็บทั่วไป ฉันได้รวมไฟล์ฐานข้อมูลภายในที่ว่างเปล่าไว้ในโปรเจ็กต์นี้ (ในโฟลเดอร์ DataModel / App_Data) เพื่อให้สามารถสร้างการย้ายจากคอนโซล Package Manager
  • WebApi ซึ่งอ้างอิงถึงโปรเจ็กต์ DataModel และใช้ไฟล์ฐานข้อมูลโลคัลจากโฟลเดอร์ WebApi / App_Data ที่ไม่รวมอยู่ในโปรเจ็กต์

ฉันได้รับข้อผิดพลาดนี้เมื่อมีการร้องขอ WebApi ...

สภาพแวดล้อมของฉัน:

  • Windows 8.1 x64
  • Visual Studio 2015 Professional พร้อมอัปเดต 1
  • โครงการทั้งหมดของฉันที่กำหนดเป้าหมายสำหรับ. NET Framework 4.6.1 การ
  • EntityFramework 6.1.3 จาก NuGet

ที่นี่ฉันรวบรวมข้อสังเกตทั้งหมดที่คุณควรใส่ใจและเงื่อนไข / ข้อกำหนดทั้งหมดที่ต้องปฏิบัติตามเพื่อหลีกเลี่ยงข้อยกเว้นที่กล่าวถึง:

  1. คุณควรใช้แพ็คเกจ EntityFramework Nuget เพียงเวอร์ชันเดียวสำหรับโครงการทั้งหมดในโซลูชันของคุณ
  2. ฐานข้อมูลที่สร้างโดยการรันสคริปต์การย้ายข้อมูลตามลำดับควรมีโครงสร้าง / สคีมาเดียวกันกับฐานข้อมูลที่คุณกำหนดเป้าหมายและสอดคล้องกับโมเดลเอนทิตี ต่อไปนี้ 3 สิ่งจะต้องสอดคล้อง / สะท้อน / ตรงกัน:
    • สคริปต์การย้ายข้อมูลทั้งหมดของคุณมีอายุการใช้งานยาวนาน
    • สถานะแบบจำลองเอนทิตีแรกของรหัสปัจจุบัน (DbContext เอนทิตี)
    • ฐานข้อมูลเป้าหมาย
  3. ฐานข้อมูลเป้าหมาย (ไฟล์ mdf) ควรได้รับการอัปเดต / สอดคล้องกับสคริปต์การย้ายข้อมูลล่าสุด ตรวจสอบว่าตาราง "__MigrationHistory" ในฐานข้อมูลเป้าหมายของคุณมีระเบียนสำหรับสคริปต์การย้ายข้อมูลทั้งหมดที่คุณมีหมายความว่าสคริปต์การย้ายข้อมูลทั้งหมดถูกนำไปใช้กับฐานข้อมูลนั้นสำเร็จแล้ว ฉันขอแนะนำให้คุณใช้ Visual Studio ในการสร้างโค้ดที่ถูกต้องเอนทิตีแรกและบริบทที่สอดคล้องกับฐานข้อมูลของคุณ Project -> Add New Item -> ADO.NET Entity Data Model -> Code First จากฐานข้อมูล: แน่นอนว่าเป็นอีกทางเลือกหนึ่งหาก คุณไม่มีฐานข้อมูลที่คุณสามารถเขียนแบบจำลองด้วยตนเอง (รหัสเอนทิตีและบริบทแรก) จากนั้นสร้างการย้ายข้อมูลและฐานข้อมูลเริ่มต้น
  4. ชื่อของสตริงการเชื่อมต่อเช่นMyConnectionStringในไฟล์ config ของโครงการเริ่มต้น (Web.config / App.config):

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

    ควรเท่ากับพารามิเตอร์ที่ส่งผ่านในตัวสร้าง DbContext ของคุณ:

     public partial class MyDbContext : DbContext
     {
        public MyDbContext()
           : base("name=MyConnectionString"){}
        ...
    
  5. ก่อนใช้Package Manager Consoleตรวจสอบให้แน่ใจว่าคุณใช้ฐานข้อมูลที่ถูกต้องสำหรับการอัพเดตหรือสร้างการโอนย้ายและโปรเจ็กต์ที่จำเป็นถูกตั้งค่าเป็นโปรเจ็กต์เริ่มต้นของโซลูชัน สำหรับการเชื่อมต่อกับฐานข้อมูลจะใช้สตริงการเชื่อมต่อจากไฟล์. config ซึ่งในโปรเจ็กต์ที่ตั้งเป็นโปรเจ็กต์เริ่มต้น
  6. และหลักซึ่งแก้ไขปัญหาของฉัน:มันแปลก แต่ในโฟลเดอร์ WebApi / bin DataModel.exe ของฉันเก่าไม่ได้รับการรีเฟรชตั้งแต่สร้างครั้งล่าสุด เนื่องจากการโยกย้ายถูกฝังอยู่ใน DataModel.exe แอสเซมบลีของฉันดังนั้น WebApi ของฉันจึงอัปเดตฐานข้อมูลโดยใช้มิเรอร์แบบเก่า ฉันสับสนว่าทำไมหลังจากอัปเดตฐานข้อมูลใน WebApi แล้วจึงไม่ตรงกับสคริปต์การย้ายข้อมูลล่าสุดจาก DataModel รหัสต่อไปนี้จะสร้างโดยอัตโนมัติ (ถ้าไม่มี) หรืออัปเดตฐานข้อมูลภายในการย้ายข้อมูลล่าสุดในโฟลเดอร์ WebApi / App_Data ของฉัน

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

    ฉันพยายามล้างและสร้างโซลูชันใหม่ แต่ก็ไม่ได้ผลดีกว่าที่ฉันลบโฟลเดอร์ bin และ obj ออกจาก WebApi โดยสมบูรณ์ไฟล์ฐานข้อมูลที่ถูกลบจาก WebApi / App_Data สร้างขึ้นรีสตาร์ท WebApi ส่งคำขอมันสร้างฐานข้อมูลที่ถูกต้อง - การเริ่มต้นแบบขี้เกียจ (โดยใช้ บรรทัดด้านบน) ซึ่งสอดคล้องกับการย้ายข้อมูลล่าสุดและข้อยกเว้นไม่ปรากฏขึ้นอีก ดังนั้นสิ่งนี้อาจแก้ไขปัญหาของคุณได้:

    1. ลบโฟลเดอร์ bin, obj ด้วยตนเองจากโครงการเริ่มต้นของคุณ (ซึ่งสร้าง / อัปเดตฐานข้อมูลของคุณ)
    2. สร้างโครงการเริ่มต้นของคุณหรือทำความสะอาดและสร้างโซลูชันทั้งหมดของคุณใหม่
    3. สร้างฐานข้อมูลใหม่โดยเริ่มโปรเจ็กต์ (จะดำเนินการตามบรรทัดด้านบน) หรือใช้คำสั่ง "update-database" ของคอนโซล Package Manager
    4. ตรวจสอบด้วยตนเองว่าฐานข้อมูลที่สร้างและ __MirgationHistory สอดคล้องกับสคริปต์การย้ายข้อมูลล่าสุดหรือไม่

3

สิ่งนี้สามารถเกิดขึ้นได้เมื่อคุณเปลี่ยนคำอธิบายประกอบข้อมูลของคุณสมบัติโมเดล ตัวอย่างเช่น: การเพิ่ม[จำเป็น]ให้กับคุณสมบัติจะทำให้เกิดการเปลี่ยนแปลงที่รอดำเนินการในการออกแบบฐานข้อมูล

วิธีแก้ปัญหาที่ปลอดภัยที่สุดคือรันบนคอนโซล Package Manager:

add-migration myMirgrationName

ซึ่งจะแสดงการเปลี่ยนแปลงที่แน่นอนในเมธอด Up () ดังนั้นคุณสามารถตัดสินใจได้ว่าต้องการใช้การเปลี่ยนแปลงดังกล่าวจริงๆหรือไม่ผ่านทาง:

update-database

มิฉะนั้นคุณอาจลบการย้ายข้อมูลล่าสุดจากตาราง __MigrationHistory และจากโฟลเดอร์ Migrations Solution Explorer


นี่เป็นคำตอบที่ดีที่สุดที่ฉันเคยเห็นที่นี่ ข้อเสนอแนะในการลบประวัติการย้ายข้อมูลเป็นความคิดที่แย่มากในความคิดของฉัน!
mgrenier

ขอบคุณสำหรับความคิดเห็นของคุณ ฉันมักจะไม่แนะนำให้ลบประวัติการย้ายข้อมูล แต่โดยเฉพาะอย่างยิ่งจุดการย้ายข้อมูลก่อนหน้านี้ไม่แตกต่างกันมากนักกล่าวคือไม่มีการปรับเปลี่ยนโมเดลมากนักโดย OP - ดังนั้นฉันคิดว่าการย้อนกลับเพียงขั้นตอนเดียวสามารถช่วยได้ โดยการลบบันทึกการย้ายข้อมูลล่าสุดเท่านั้น
Mohamed Nagieb

3

เพียงแค่ลบประวัติการย้ายข้อมูลใน _MigrationHistory ใน DataBase ของคุณ มันได้ผลสำหรับฉัน


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 ..... "คุณสามารถเพิ่ม databasecontext ทั้งหมดที่มีปัญหานี้ในวิธี app_start ของคุณในไฟล์ global.asax ดังนี้" :

Database.SetInitializer(Of DatabaseContext)(Nothing)

หมายเหตุ: ฉันต้องแทนที่ "DatabaseContext" ด้วยชื่อคลาสของฉันที่ใช้ DbContext

อัปเดต: นอกจากนี้เมื่อใช้วิธี codefirst เพื่อเชื่อมต่อกับตารางที่มีอยู่ให้ตรวจสอบฐานข้อมูลเพื่อดูว่า EF ได้สร้างตาราง "_migrationhistory" เพื่อจัดเก็บการแมปหรือไม่ ฉันตั้งชื่อตารางนี้ใหม่จากนั้นก็สามารถลบ SetInitializer จาก global.asax


1

ฉันเพิ่งแก้ไขปัญหาที่คล้ายกันโดยการลบไฟล์ทั้งหมดในโฟลเดอร์เว็บไซต์แล้วเผยแพร่ใหม่


1

ลบข้อมูลประจำตัวของตารางทั้งหมด

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


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] ด้วย Older productVersion ใช้ได้ผลสำหรับฉัน คำตอบนี้สำหรับผู้ที่ไม่ต้องการลบทั้งตาราง [__MigrationHistory] เพียงลบแถวที่มีเวอร์ชันเก่ากว่าในคอลัมน์ ProductVersion หวังว่าจะช่วยได้บ้าง!


0

ด้านล่างนี้เป็นข้อผิดพลาดที่คล้ายกันที่ฉันพบ

โมเดลที่สำรองบริบท "PsnlContext" มีการเปลี่ยนแปลงตั้งแต่สร้างฐานข้อมูล พิจารณาใช้ Code First Migrations เพื่ออัปเดตฐานข้อมูล ( http://go.microsoft.com/fwlink/?LinkId=238269 )

ฉันเพิ่มส่วนด้านล่างในเหตุการณ์เริ่มต้นแอปพลิเคชันของ Global.asax เพื่อแก้ไขข้อผิดพลาด

Database.SetInitializer (null);

สิ่งนี้ช่วยแก้ปัญหาได้


0

เพียงแค่ข้อผิดพลาดหมายความว่าโมเดลของคุณมีการเปลี่ยนแปลงและไม่ได้อยู่ใน Sync with DB ดังนั้นไปที่คอนโซลตัวจัดการแพ็กเกจ add-migration foo2 สิ่งนี้จะให้คำแนะนำว่าอะไรเป็นสาเหตุของปัญหาอาจเป็นคุณลบบางอย่างออกหรือในกรณีของฉันฉันลบคำอธิบายประกอบข้อมูล . จากตรงนั้นคุณจะได้รับการเปลี่ยนแปลงและหวังว่าจะเปลี่ยนกลับในแบบจำลองของคุณ

หลังจากนั้นลบ foo2


0

ฉันรู้ว่าฉันมาช้ามาก แต่ฉันก็อยากจะบริจาคด้วยเช่นกัน ข้อผิดพลาดนี้แปลกมากเนื่องจากเบราว์เซอร์ไม่สามารถเข้าใจว่าควรแสดงการเปลี่ยนแปลงอย่างไรเนื่องจากคลาสและคุณสมบัติอาจมีการเปลี่ยนแปลง แต่ไม่ได้เชื่อมโยงกับฐานข้อมูล

ทำสิ่งหนึ่ง

สร้างการโยกย้ายหนึ่งรายการในคอนโซล Package Manager (เครื่องมือ> NuGet Package Manager> Package Manager Console)โดยใช้คำสั่งนี้:

add-migration UpdateMigration

โดยที่ UpdateMigration คือชื่อของการย้ายข้อมูลของคุณ คุณสามารถตั้งชื่ออะไรก็ได้ตามต้องการ แต่โปรดระบุให้ชัดเจน

หลังจากนั้นเราต้องอัปเดตฐานข้อมูลดังนั้นให้รันสิ่งนี้:

ปรับปรุงฐานข้อมูล

ตอนนี้คุณได้ทำการเปลี่ยนแปลงฐานข้อมูลแล้วเพียงรีเฟรชเบราว์เซอร์ของคุณแล้วไปได้เลย

หวังว่านี่จะช่วยได้


0

update-Databaseนี้มาเพราะคุณเพิ่มคุณสมบัติบางอย่างที่จะเป็นหนึ่งในรูปแบบของคุณและคุณไม่ได้ เพื่อแก้ปัญหานี้คุณจะต้องลบออกจากรูปแบบหรือคุณจะต้องมีคุณสมบัติที่และadd-migration anyProperName Update-database


0

ข้อผิดพลาดนี้เกิดขึ้นกับฉันเมื่อฉันทำการเปลี่ยนแปลงโมเดลของฉันและไม่ได้ทำการโอนย้ายสำหรับการเปลี่ยนแปลงเพื่ออัปเดตฐานข้อมูล

หากคุณเคยทำการเปลี่ยนแปลงโมเดลของคุณใน Code First Migration Schema

อย่าลืมเพิ่มการย้ายข้อมูล

add-migration UpdatesToModelProperites 

คำสั่งด้านบนจะอ่านการเปลี่ยนแปลงทั้งหมดที่คุณทำในโมเดลและจะเขียนลงในเมธอด Up () และ Down ()

จากนั้นอัปเดตฐานข้อมูลของคุณโดยใช้คำสั่งด้านล่าง

update-database

นี่คือสิ่งที่ได้ผลสำหรับฉัน


-2

ลบฐานข้อมูลที่มีอยู่สร้างฐานข้อมูลใหม่ด้วยชื่อเดียวกันคัดลอกข้อมูลทั้งหมด ... มันจะทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.