今天是一個悲傷的一天。今天我首先看到了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