我正在使用 MVC 4、Entity Framework 5 和 Code First 方法。
当我对我的模型进行更改并运行应用程序时,我收到一个关于无法删除数据库的错误,因为它正在使用中。
为了解决这个问题,我已经实现了自己IDatabaseInitializer
的强制单个连接,如下所示:
public class ForceDropCreateDatabaseInitializer<T> : IDatabaseInitializer<T> where T : DbContext, new()
{
public ForceDropCreateDatabaseInitializer(Action<T> seed = null)
{
Seed = seed ?? delegate { };
}
public Action<T> Seed { get; set; }
public void InitializeDatabase(T context)
{
if (context.Database.Exists())
{
string databaseName = context.Database.Connection.Database;
string alterStatement = "ALTER DATABASE [{0}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE";
string dropStatement = "USE [master] DROP DATABASE [{0}]";
context.Database.ExecuteSqlCommand(alterStatement, databaseName);
context.Database.ExecuteSqlCommand(dropStatement, databaseName);
}
context.Database.Create();
Seed(context);
}
}
但现在我在这一行收到权限错误:
context.Database.ExecuteSqlCommand(alterStatement, databaseName);
异常消息:
用户无权更改数据库“@p0”,数据库不存在,或数据库未处于允许访问检查的状态。
ALTER DATABASE 语句失败。
我假设使用了@p0,因为我正在使用参数。每次进行模型更改时,如何避免此错误并成功删除并创建我的数据库?