C# 获得';无法更新数据库错误';在发出enable migrations命令时
C# 获得';无法更新数据库错误';在发出enable migrations命令时,c#,.net,entity-framework,entity-framework-migrations,C#,.net,Entity Framework,Entity Framework Migrations,我在项目中首先使用EF 6和代码 我试图理解如何使用“启用迁移”命令 DbContext和初始值设定项示例的最简单形式如下所示。 当我发出“启用迁移”命令时,package manager控制台会输出如下错误: 无法更新数据库以匹配当前模型,因为存在挂起的更改,并且禁用了自动迁移。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将DbMigrationsConfiguration.AutomaticMiggrationsEnabled设置为true以启用自动迁移 但是如果我不调用Initia
我在项目中首先使用EF 6和代码
我试图理解如何使用“启用迁移”命令
DbContext和初始值设定项示例的最简单形式如下所示。
当我发出“启用迁移”命令时,package manager控制台会输出如下错误: 无法更新数据库以匹配当前模型,因为存在挂起的更改,并且禁用了自动迁移。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将DbMigrationsConfiguration.AutomaticMiggrationsEnabled设置为true以启用自动迁移 但是如果我不调用
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"
});
}
}
公共类MyDbContext:DbContext
{
public MyDbContext():base(“TestDb”)
{
SetInitializer(新的DbContextInitializer());
初始化为tabase();
}
受保护的虚拟void InitializeDatabase()
{
如果(!Database.Exists())
{
数据库初始化(true);
}
}
公共DbSet TestModels{get;set;}
}
公共类DbContextInitializer:CreateDatabaseIfNotExists
{
受保护的覆盖无效种子(MyDbContext上下文)
{
种子(上下文);
context.TestModels.Add(新的TestModel(){
Name=“Lorem”,
姓氏=“Ipsum”
});
}
}
您的初始值设定项是从CreateDatabaseIfNoteExists继承的,这不是迁移的逻辑选择。您有一些未应用的挂起模型更改,因为模型已更改,并且只有在数据库不存在时才会运行初始值设定项
您可以删除数据库,使其通过更改重新初始化,或者将初始值设定项切换到。这里有一篇关于这个问题的好文章