Я пытаюсь программно инициализировать базу данных SQL Server, используя DbMigrator
класс от EntityFramework
:DbMigrator не вносить изменения в базу данных
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
транзакция, которую он использует, не привязана к БД (DBCC OPENTRAN
выдает, что транзакция по-прежнему открыта). И по какой-то причине данные транзакций отбрасываются, прежде чем я попытаюсь выполнить некоторые запросы, используя MyDataBaseContext
.
Что может быть причиной такого поведения? Почему dbMigrator.Update
совершает все необходимые миграции для некоторых баз данных, но не для других? Могу ли я управлять транзакциями dbMigrator
вручную и заставлять их совершать?