我正在使用 NUnit 和 Entity Framework 编写一些单元测试。 如何从 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 的引用
最佳答案
有两种方法可以在代码中执行此操作。如果可以的话,首先坚持使用 EF 代码:-)
1) EF 在上下文方面有一个不错的选项。
Context.Database.Delete()
2)如果你想要老式的 SQLCommand/SqlConnection 方法,比如这个黑客例程......
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;
}
关于entity-framework - 首先删除 Entity Framework 代码中的localdb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14893998/