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);
}
我们缺少什么?
您的测试是否并行运行? –
他们可能,应该没关系,甚至更强,如果他们是这样应该防止他们删除并重新创建数据库一致 –
嗯,我不是唯一有这个问题的人找到了答案[这里(在栈上的课程)]( http://stackoverflow.com/questions/15051185/entity-framework-unable-to-delete-database-database-in-use?rq=1) –