Ich versuche programmatisch eine SQL Server-Datenbank zu initialisieren mit DbMigrator
Klasse von EntityFramework
:DbMigrator begeht keine Änderungen an Datenbank
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();
}
Das Seltsame ist, dass der Code für alle meine Datenbank-Baugruppen mit einer Ausnahme gut funktioniert . Aus irgendeinem Grund eine der DB ist nicht initialisiert zu werden, und ich empfange eine Ausnahme:
System.Data.SqlClient.SqlException: Invalid object name 'dbo.MyTable1'.
Wenn ich den SQL Server Profiler zu öffnen, kann ich sehen, dass alle Migrationen ohne Fehler angewendet werden. Wenn ich die Datenbank in SQL Server Management Studio öffne, kann ich jedoch sehen, dass es überhaupt keine Tabellen enthält.
Nach weiteren Untersuchungen, fand ich heraus, dass nach dbMigrator.Update
ausgeführt wird, ist die Transaktion, die es verwendet, nicht an die DB (DBCC OPENTRAN
Ausgänge, dass die Transaktion noch offen ist) verpflichtet. Und aus irgendeinem Grund werden die Transaktionsdaten verworfen, bevor ich versuche, einige Abfragen mit MyDataBaseContext
durchzuführen.
Was kann die Ursache für ein solches Verhalten sein? Warum schreibt dbMigrator.Update
alle erforderlichen Migrationen für einige Datenbanken fest, aber nicht für andere? Kann ich dbMigrator
Transaktionen manuell steuern und sie zum Commit zwingen?