【发布时间】:2023-03-18 04:32:01
【问题描述】:
我正在尝试使用来自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 时,我可以看到所有迁移都在应用且没有错误。但是,当我在 SQL Server Management Studio 中打开数据库时,我可以看到它根本不包含任何表。
经过进一步调查,我发现dbMigrator.Update执行后,它使用的事务没有提交到DB(DBCC OPENTRAN输出事务仍然打开)。由于某种原因,在我尝试使用MyDataBaseContext 进行一些查询之前,交易数据被丢弃了。
这种行为的原因可能是什么?为什么dbMigrator.Update 为某些数据库提交所有必要的迁移,而对其他数据库却没有?我可以手动控制dbMigrator 事务并强制它们提交吗?
【问题讨论】:
-
我刚刚遇到了同样的问题。当我使用 MigratorScriptorDecorator 时,它不起作用。当我删除此代码时,它确实如此。
标签: c# sql-server entity-framework entity-framework-migrations