2017-08-05 51 views
0

我在Visual Studio中創建了一個ASP.NET MVC示例應用程序。我說像下面兩類:在Entity Framework中更新沒有遷移的數據庫

public class Product 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int Price { get; set; } 
    public ICollection<Product> Products { get; set; } 
} 

public class Order 
{ 
    public int Id{ get; set; } 
    public Product Product { get; set; } 
    public int ProductId { get; set; } 
    public DateTime RegisterDate { get; set; } 
} 

,然後我添加了兩個DbSet到主DbContext這樣的:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public IDbSet<Product> Products { get; set; } 
    public IDbSet<Order> Orders { get; set; } 

    public ApplicationDbContext() 
     : base("DefaultConnection", throwIfV1Schema: false) 
    { 
    } 

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

但現在當我跑項目,我得到這個錯誤:

自創建數據庫以來,支持「ApplicationDbContext」上下文的模型已更改

我只想知道是否有方法更新數據庫而不使用遷移(Add-migrationsupdate-database)?

+2

我認爲你正在尋找DropCreateDatabaseIfModelChanges – Rise

+1

您可以使用[數據庫初始化](http://www.entityframeworktutorial.net/如Rise所示,代碼優先/數據庫初始化策略代碼優先.aspx)。這些對於早期發展很方便,並有自己的種子方法。一旦獲得了要保留的非種子數據,您可以切換到遷移。使用空初始化程序不會創建數據庫對象 - 它會假定代碼模型與數據庫匹配(危險)。 –

回答

2

您可以啓用自動遷移來實現此目的。此方法絕對使用代碼優先遷移,但您不需要使用添加遷移命令或更新數據庫

運行啓用的遷移從包管理器控制檯-EnableAutomaticMigrations首先生成一個配置類,如下所示:

internal sealed class Configuration : DbMigrationsConfiguration<ApplicationDbContext> 
{ 
    public Configuration() 
    { 
    AutomaticMigrationsEnabled = true; 
    } 

    protected override void Seed(ApplicationDbContext context) 
    { 
    } 
} 

現在,您既可以更新數據庫方面的構造遷移到最新版本如下:

public ApplicationDbContext() 
    : base("DefaultConnection", throwIfV1Schema: false) 
{ 
    Database.SetInitializer(
      new MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration>()); 
    this.Database.Initialize(true); 
} 

或遷移到應用的最新版本啓動如下:

using (var context = new ApplicationDbContext()) 
{ 
    Database.SetInitializer(
       new MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration>()); 
    context.Database.Initialize(true); 
} 
2

您可以按照需要更新數據庫結構(通過DBMS用戶界面等進行查詢)。
如果你這樣做,你需要禁用配置檢查。

Database.SetInitializer<YourContext>(null); 

(我插入此在上下文中的靜態構造函數)

相關問題