C# EF在测试之间删除数据库

C# EF在测试之间删除数据库,c#,specflow,C#,Specflow,我正在使用Specflow为我的UI编写测试。某些测试更改了我的数据库,因此我无法重新运行某些测试。当我使用EF时,我决定简单地删除我的数据库(因为EF将创建一个新的数据库并为其种子)。当我运行测试时,我的MVC项目是开放的。我试图用以下代码删除我的数据库: [BeforeFeature] public static void DropDatabase() { Database.Delete("SampleDbName"); } 但问题是,我无法删除数据库,因为它目前正在使用中。 然后

我正在使用Specflow为我的UI编写测试。某些测试更改了我的数据库,因此我无法重新运行某些测试。当我使用EF时,我决定简单地删除我的数据库(因为EF将创建一个新的数据库并为其种子)。当我运行测试时,我的MVC项目是开放的。我试图用以下代码删除我的数据库:

[BeforeFeature]
public static void DropDatabase()
{
    Database.Delete("SampleDbName");
}
但问题是,我无法删除数据库,因为它目前正在使用中。 然后我尝试了两种解决方案:

  • 将Pooling=false添加到我的连接字符串

  • 调用SqlConnection.ClearAllPools();在删除我的数据库之前

  • 这两种情况对我都不起作用,因为每次我尝试访问数据库时都会出现“无法将文件.mdf附加为数据库”错误(这是在删除数据库后发生的)。

    我的目标是在不重新启动MVC项目的情况下使测试无法重新启动。是否有一些解决方案可以解决这个问题?

    .Net Core或Framework?@MichaelRandall Framework(ef6)理想情况下,您应该模拟数据库,而不是实际操作数据库。有什么理由不这么做吗?试着模仿一下Austin在VS的单元测试项目中所写的。还有,为什么要删除整个数据库?截断还不够吗?在EF中,您可以使用Clear()@austinfrench删除所有实体。我过去在单元测试中模拟数据库,但现在必须使用真实数据库