我在项目中首先使用EF 6和代码
我尝试使用'enable-migrations'命令来理解。
DbContext和Initializer示例的格式最简单,如下所示
当我给出命令'enable-migrations'时,package-manager控制台输出如下错误:
无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移。
但是如果我没有从MyDbContext构造函数调用InitializeDatabase();
方法,则不会发生错误,也不会运行数据导入或种子方法。
只有数据库创建。
我想知道是什么原因以及这个错误的意思是什么如果我使用InitializeDatabase()
方法。
谢谢
public class MyDbContext : DbContext
{
public MyDbContext():base("TestDb")
{
Database.SetInitializer(new DbContextInitializer());
InitializeDatabase();
}
protected virtual void InitializeDatabase()
{
if (!Database.Exists())
{
Database.Initialize(true);
}
}
public DbSet<TestModel> TestModels { get; set; }
}
public class DbContextInitializer : CreateDatabaseIfNotExists<MyDbContext>
{
protected override void Seed(MyDbContext context)
{
base.Seed(context);
context.TestModels.Add(new TestModel() {
Name = "Lorem",
Surname = "Ipsum"
});
}
}
答案 0 :(得分:1)
您的初始化程序继承自CreateDatabaseIfNotExists,这不是迁移的逻辑选择。您有一些未应用的未决模型更改,因为模型已更改,并且初始化程序仅在数据库不存在时才会运行。
您可以删除数据库,使其重新初始化更改,或将初始值设定项切换为MigrateDatabaseToLatestVersion。这是一篇关于initializers and seeding的好文章。