2017-08-05 49 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); 

(我插入此在上下文中的静态构造函数)

相关问题