的情況是:Enity框架6.0.0.0:無法產生明確的遷移與...基於代碼遷移
- 每個租戶分貝。
- 非自動基於代碼的遷移。 dbs的初始創建也是通過Code First來完成的。當前場景中沒有預先存在的dbs。
- 確切的數據庫在生成遷移腳本的過程中是不知道的,因爲有很多。我唯一擁有的是代碼 - 初始模型的初始遷移腳本和一些修改的模型。
- 使用初始腳本生成的現有dbs - 一切正常。下面是我如何重現該問題:
- 運行PS命令:添加遷移-Name初始-StartUpProjectName MyApp.Web -ProjectName MyApp.Migrations -ConfigurationTypeName「MyApp.Migrations.MyMigrationConfiguration」-ConnectionString「Data Source =。\ SQLEXPRESS; Database = demo-db; Trusted_Connection = False; User ID = x; Password = x「-ConnectionProviderName」System.Data.SqlClient「 - Works Fine
- 運行應用程序並創建數據庫。停止應用程序。修改模型。
- 運行PS命令:Add-Migration -Name MySecondMigration -StartUpProjectName MyApp.Web -ProjectName MyApp.Migrations -ConfigurationTypeName「MyApp.Migrations.MyMigrationConfiguration」-ConnectionString「Data Source =。\ SQLEXPRESS; Database = demo-db; Trusted_Connection =假;用戶ID = x;密碼= x「-ConnectionProviderName」System.Data.SqlClient「 - 繁榮。
- 微妙 - 移植者甚至連連接到MSSQL來檢查數據庫是否存在或有dbo .__ MigrationHistory!我進一步研究並關閉了MSSQL服務! - 如果我輸入了錯誤的數據庫名稱,或者我關閉了整個MSSQL服務器 - 沒關係,錯誤是一樣的,沒有連接。那麼它如何知道在不檢查數據庫的情況下正在進行遷移?我假設一個錯誤。
- 我已經在其中創建了__dbo.MigrationHistory,並具有初始遷移。
- 錯誤:無法生成顯式遷移,因爲以下顯式遷移未完成:[201402121953301_Initial]。在嘗試生成新的顯式遷移之前應用待處理的顯式遷移。
這裏是我的配置 - 沒有什麼特別的:
public class MyMigrationConfiguration : DbMigrationsConfiguration<MyMigrationContext>
{
public MyMigrationConfiguration()
{
AutomaticMigrationsEnabled = false;
AutomaticMigrationDataLossAllowed = false;
MigrationsNamespace = "---";
MigrationsDirectory = "---";
}
}
這裏是至極的方法,我創建了DBS:
public void CreateOrUpdateDb(string DbName)
{
try
{
string connectionString = _connectionStringProvider.GetConnectionString(DbName);
DbMigrationsConfiguration cfg = CreateMigrationsConfig(connectionString);
cfg.AutomaticMigrationsEnabled = false;
cfg.AutomaticMigrationDataLossAllowed = false;
DbMigrator dbMigrator = new DbMigrator(cfg);
dbMigrator.Update();
}
catch (MigrationsException exception)
{
_logger.Error(string.Format("Error creating database '{0}'",DbName), exception);
}
}
我已經搜索並閱讀什麼我可以找到網絡,但大多數例子包括標準的Configuration.cs等等。沒有人解釋爲什麼我應該運行Enable-Migrations,因爲它會創建Configuration.cs,但我自己提供Configuration類,不需要這個其他類。
這裏是異常堆棧:
> System.Data.Entity.Migrations.Infrastructure.MigrationsPendingException: Unable to generate an explicit migration because the following explicit migrations are pending: [201402121953301_Initial]. Apply the pending explicit migrations before attempting to generate a new explicit migration.
at System.Data.Entity.Migrations.DbMigrator.Scaffold(String migrationName, String namespace, Boolean ignoreChanges)
at System.Data.Entity.Migrations.Design.MigrationScaffolder.Scaffold(String migrationName, Boolean ignoreChanges)
at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Scaffold(MigrationScaffolder scaffolder)
at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Run()
at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
at System.Data.Entity.Migrations.Design.ToolingFacade.Scaffold(String migrationName, String language, String rootNamespace, Boolean ignoreChanges)
at System.Data.Entity.Migrations.AddMigrationCommand.Execute(String name, Boolean force, Boolean ignoreChanges)
at System.Data.Entity.Migrations.AddMigrationCommand.<>c__DisplayClass2.<.ctor>b__0()
有沒有什麼辦法來強制遷移,以使腳本沒有告訴我,有即使有一些不掛起遷移?這是EF中的100%錯誤,但我不知道如何解決。