2013-02-15 1 views
2

NUnit 및 Entity Framework를 사용하여 UnitTests를 작성하고 있습니다. Entity Framework 수준에서 전체 localdb 데이터베이스를 삭제하는 방법은 무엇입니까?Entity Framework에서 localdb 삭제 코드 우선

참고 : 테이블의 데이터를 지우고 싶지 않습니다. 전체 데이터베이스를 삭제하고 싶습니다.

또한 나는 데이터베이스가 작성되지 않은 제공 내 응용 프로그램 작업 디렉토리에서 localdb 파일을 만들 수 있어요 :

string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ""); 
var testDbFileName = String.Format(@"UnitTestDB.mdf"); 
var testDbFileNameWithPath = path + @"\" + testDbFileName; 

var connectionString = 
String.Format(
    @"Data Source=(localdb)\V11.0;Initial Catalog={0};Integrated Security=True;AttachDBFilename={1};MultipleActiveResultSets=True", 
    "UnitTestDB", testDbFileNameWithPath); 

//Here would be the code passing connection string to DbContext and so on.. 

파일 만 "UnitTestDB.mdf 삭제"충분하지 않습니다. SQL Management Studio의 db에 대한 참조가 여전히 있습니다.

답변

5

코드에서이 작업을 수행하는 방법은 두 가지가 있습니다. 당신이 할 수있는 경우에 EF 부호에 첫째로 지키십시오 : -)

1) EF는 문맥에 좋은 선택권이있다.

public bool DropDB(string DBName, string ConnectionString) 
    { 

     SqlConnection conn = null; 
     SqlCommand cmd = null; 
     string stmt = null; 

     int rowCount = 0; 

     if (string.IsNullOrEmpty(DBName)) 
      throw new ArgumentNullException(DBName, "DBName required"); 

     try 
     { 
      conn = new SqlConnection(ConnectionString); 

      stmt = "DROP DATABASE " + DBName ; 

      cmd = new SqlCommand(stmt, conn); 
      conn.Open(); 
      rowCount = cmd.ExecuteNonQuery(); 
      conn.Close(); 
     } 
     catch (Exception) 
     { 
      //todo whatever 
      throw; 
     } 
     finally 
     { 
      if (conn != null) conn.Dispose(); 
      if (cmd != null) conn.Dispose(); 
     } 
     if (rowCount == -1) return true; 
     return false; 
    } 
+0

Context.Database.Delete() 

2)이 해킹 루틴과 같은 오래된 학교 SqlCommand를 /도록 SqlConnection 접근 무언가를 원하는 경우는 ..., 매우 도움이 대답을 주셔서 감사합니다. 내가 그것을 읽기 전에 나는 새로운 GUid를 생성하여 TestFixture에 새로운 db를 생성하여 매번 db (및 그 구조)를 다시 만들었습니다. 그런 다음 SQL Management Studio 수준에서 모든 데이터베이스를 삭제했습니다. – lixonn