给出 enable-migrations 命令时得到 'Unable to update database error' 的原因是什么
what is the reason of getting 'Unable to update database error' when giving enable-migrations command
我在项目中首先使用 EF 6 和代码
我尝试使用 'enable-migrations' 命令来理解。
DbContext 和 Initializer 示例采用最简单的形式,如下所示。
当我给出命令 'enable-migrations'
包管理器控制台输出如下错误:
Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.
但如果我不从 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"
});
}
}
您的初始化程序继承自 CreateDatabaseIfNotExists,这不是迁移的合理选择。您有一些未应用的未决模型更改,因为模型已更改并且您的初始化程序仅在数据库不存在时才会 运行。
您可以删除您的数据库,以便它根据更改重新初始化,或者将您的初始化程序切换为 MigrateDatabaseToLatestVersion. Here is a good article on initializers and seeding。
我在项目中首先使用 EF 6 和代码
我尝试使用 'enable-migrations' 命令来理解。
DbContext 和 Initializer 示例采用最简单的形式,如下所示。
当我给出命令 'enable-migrations'
包管理器控制台输出如下错误:
Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.
但如果我不从 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"
});
}
}
您的初始化程序继承自 CreateDatabaseIfNotExists,这不是迁移的合理选择。您有一些未应用的未决模型更改,因为模型已更改并且您的初始化程序仅在数据库不存在时才会 运行。
您可以删除您的数据库,以便它根据更改重新初始化,或者将您的初始化程序切换为 MigrateDatabaseToLatestVersion. Here is a good article on initializers and seeding。