2017-02-21 6 views
2

에 변경 내용을 커밋하지 않습니다DbMigrator는 <code>EntityFramework</code>에서 프로그래밍 방식 <code>DbMigrator</code> 클래스를 사용하여 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(); 
} 

이상한 것은이 코드를 제외한 모든 내 데이터베이스 어셈블리에 대해 잘 작동하는지 . 어떤 이유로 DB의 하나가 초기화 점점되지 않으며, 나는 예외를 수신하고 있습니다 :

System.Data.SqlClient.SqlException: Invalid object name 'dbo.MyTable1'. 

나는 SQL Server 프로파일 러를 열고

, 나는 모든 마이그레이션이 오류없이 적용되고 있는지 확인할 수 있습니다. 그러나 SQL Server Management Studio에서 데이터베이스를 열면 전혀 테이블이없는 것을 볼 수 있습니다.

추가 조사를 마치면 dbMigrator.Update이 실행 된 후에 사용하는 트랜잭션이 DB에 커밋되지 않았 음을 알 수 있습니다 (DBCC OPENTRAN 출력은 트랜잭션이 아직 열려 있음). 그리고 어떤 이유로 인해 MyDataBaseContext을 사용하여 일부 쿼리를 시도하기 전에 트랜잭션 데이터가 삭제됩니다.

이러한 문제의 원인은 무엇입니까? dbMigrator.Update이 일부 데이터베이스에서는 필요한 모든 마이그레이션을 커밋하지만 다른 데이터베이스에서는 마이그레이션하지 않는 이유는 무엇입니까? dbMigrator 트랜잭션을 수동으로 제어하고 강제로 커밋 할 수 있습니까?

답변

0

동일한 문제가 발생했습니다. 나는 주변에서 일을 끝냈다.

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(); 
    } 
}