今天是一个悲伤的一天。今天我首先看到了EF异常,说“自从创建数据库以来,支持'DomainContext'上下文的模型已经改变了。”“。这是接近午夜,我仍然看到这个错误。这是我职业生涯的终点 - (实体框架创建空迁移,但坚持我的模型是不同的
我敢肯定没有在模式发生了变化,没有出现错误我试图创建一个新的迁移,就出来了空:
public void Up()
{
}
public void Down()
{
}
应用这种迁移并没有任何好处 - 错误坚持我用共同建议设置初始化剂为空:。
Database.SetInitializer<DomainContext>(null);
,这让错误消失,当我访问数据库,但这些问题影响我非常多 - 每当我尝试通过代码运行迁移时,我都会看到simil再次AR错误:
var configuration = new Migrations.Configuration();
configuration.TargetDatabase = new DbConnectionInfo("correct connection string", "System.Data.SqlClient");
var migrator = new DbMigrator(configuration);
migrator.Update(); // <<-- exception is thrown here
例外扔如下:System.Data.Entity.Migrations.Infrastructure.AutomaticMigrationsDisabledException:无法更新数据库,因为有挂起的更改,并自动迁移到当前的匹配模型被禁用。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移。
我已经更新到EF 6.1(在6.0.2之前),但这没有什么区别。
困扰我,我可以通过控制台的NuGet运行迁移另一件事:
Update-Database
运行良好,不给任何问题。但是,当我设置DB初始化器自动运行迁移:
var initializer = new MigrateDatabaseToLatestVersion<DomainContext, Migrations.Configuration>();
Database.SetInitializer(initializer);
var domainContext = new DomainContext();
domainContext.Database.Initialize(true); // <<-- this throws exception
无法更新数据库,因为有挂起的更改,并自动迁移到当前的匹配模型被禁用。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移。
真正的问题是EF为什么在运行Nuget控制台和通过Migrations DB-Initialiser运行时为模型提供了不同的哈希值?我怎样才能找出什么是不同的(模型从数据库状态)?以及如何解决这个问题,所以我不必使用黑客(将空分配给db-initaliser)?
你为什么不尝试一个虚拟的变化?假设要在表中添加一个字段,并且看看EF在请求创建迁移时做了什么,当然以后要删除该字段。 –
试过 - 在移民中只增加了那个领域,没有其他的东西。我目前正在通过EF代码,我想我找到了错误的原因。一旦我修复它,我会发布一篇博客文章。可以对其他人有用。 – trailmax
@Guillelon发现问题 - 这是属性[AllowHtml]应用于模型的一个属性。 – trailmax