2016-08-01 2 views
0

EF 6을 사용하고 일부 통합 테스트에는 데이터베이스를 완전히 제거하고 데이터베이스 컨텍스트를 사용하여 다시 작성하려고합니다.EntityFramework를 사용하여 데이터베이스 삭제 및 다시 작성

우리는 데이터베이스의 독점적 인 사용을 시도하지만 사용중인 데이터베이스는 errror가되고 있습니다. 이것이 우리가 시도한 것입니다.

private void CreateDatabase() 
    { 
     MyDbContext context = new MyDbContext(); 
     SqlConnection sqlConnection = context.Database.Connection as SqlConnection; 

     LockDb(sqlConnection); 
     context.Database.Delete(); 
     context.Database.CreateIfNotExists(); 
     UnLockDb(sqlConnection); 
     _context = context; 
    } 

    private void LockDb(SqlConnection connection) 
    { 
     const string cmdText = 
      "USE[master];" 
      + "IF exists(select * from sys.databases where name = 'MyDb')" 
      + "BEGIN" 
      + " ALTER DATABASE[MyDb] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;" 
      + "END;"; 

     OpenConnection(connection); 
     ExecuteCommand(connection, cmdText); 
    } 

무엇이 빠져 있습니까?

+0

테스트가 병렬로 실행됩니까? –

+0

그들이 중요하지 않아도 더 강해서, 데이터베이스를 삭제하고 다시 가져 오지 못하게해야합니다. –

+0

글쎄,이 문제가있는 유일한 사람은 아니 었습니다. [여기서 (물론) 스택]) http://stackoverflow.com/questions/15051185/entity-framework-unable-to-delete-database-database-in-use?rq=1) –

답변

1

이 잘 나는이 문제를 가진 단 하나 here (on stack ofcourse)

트릭이 잘 단일 SQL 문

private void DeleteDb(SqlConnection connection) 
    { 
     const string cmdText = 
      "USE[master];" 
      + "IF exists(select * from sys.databases where name = 'Tor')" 
      + "BEGIN" 
      + " ALTER DATABASE[Tor] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;" 
      + " DROP DATABASE [Tor];" 
      + "END;"; 

     OpenConnection(connection); 
     ExecuteCommand(connection, cmdText); 
    } 

UPDATE

에서 데이터베이스를 삭제하는 것입니다 해답을 찾을 수 없습니다 심지어 위는 총알 증명이 아닙니다. 지금 바로 사용

: 우리가 관리 Studio에서 열린 쿼리를하지 않는

private void CreateDatabase() 
    { 
     TorDbContext context = new TorDbContext(); 
     context.Database.Delete(); 
     context.Database.Create(); 
     _context = context; 
    } 

은 긴 작동합니다. 우리의 통합 테스트를 방해하지 않습니다 ...

관련 문제