C# DbMigrator不会将更改提交到数据库

C# DbMigrator不会将更改提交到数据库,c#,sql-server,entity-framework,entity-framework-migrations,C#,Sql Server,Entity Framework,Entity Framework Migrations,我正在尝试使用EntityFramework中的DbMigrator类以编程方式初始化SQL Server数据库: var configuration = new MyDataBaseAssembly.Migrations.Configuration(); configuration.TargetDatabase = new System.Data.Entity.Infrastructure.DbConnectionInfo(myConnectionString, "System.Data.

我正在尝试使用
EntityFramework
中的
DbMigrator
类以编程方式初始化SQL Server数据库:

var configuration = new MyDataBaseAssembly.Migrations.Configuration();  
configuration.TargetDatabase = new System.Data.Entity.Infrastructure.DbConnectionInfo(myConnectionString, "System.Data.SqlClient");

var dbMigrator = new DbMigrator(configuration);
dbMigrator.Update();

using (var context = new MyDataBaseAssembly.MyDataBaseContext(myConnectionString))
{
    // do some queries
    context.MyTable1.ToList();
}
奇怪的是,除了一个数据库程序集之外,所有数据库程序集的代码都运行良好。出于某种原因,其中一个数据库未初始化,我收到一个异常:

System.Data.SqlClient.SqlException: Invalid object name 'dbo.MyTable1'.
当我打开SQL Server Profiler时,我可以看到所有迁移都在应用中,没有错误。但是,当我在SQLServerManagementStudio中打开数据库时,我可以看到它根本不包含任何表

在进一步调查之后,我发现在执行了
dbMigrator.Update
之后,它使用的事务没有提交到数据库(
DBCC OPENTRAN
输出该事务仍然打开)。由于某种原因,在我尝试使用
MyDataBaseContext
进行一些查询之前,事务数据会被丢弃


这种行为的原因是什么?为什么
dbMigrator.Update
为某些数据库提交所有必要的迁移,而不为其他数据库提交迁移?我是否可以手动控制
dbMigrator
事务并强制它们提交?

我遇到了同样的问题。最后我和我的同事一起解决了这个问题

var scriptor = new MigratorScriptingDecorator(dbMigrator);
var script = scriptor.ScriptUpdate(sourceMigration: null, targetMigration: null);
using (var conn = new SqlConnection(connString))
{
    conn.Open();
    using (SqlCommand cmd = new SqlCommand(script, conn))
    {
        cmd.ExecuteNonQuery();
    }
}