实体框架无法删除数据库,数据库正在使用中

2024-06-23

我(和许多其他人一样)遇到了这样的问题:我无法让我的 NUnit 测试删除数据库中的数据库[SetUp]我的测试装置。

我想要实现什么

我想编写集成测试来测试我的代码并验证预期结果是否存储在数据库中(断言 CRUD 方法)。那,and我希望能够实际显示 Sql Server 中的表并查看数据库中的结果如何。最后一部分似乎很难实现......

出了什么问题

我可以连续多次运行测试。数据库在中重新创建[SetUp]每次测试都通过断言。当我想在 SqlServer 的实际数据库中检查结果时,它就付诸东流了。一旦我从 SqlServer 打开连接,[SetUp]方法不允许删除数据库,因为它具有打开的连接。

我尝试过什么

  • 数据库初始化程序
  • 更改数据库设置 SINGLE_USER 并立即回滚
  • Pooling=false 添加到连接字符串

我的这些想法来自this https://stackoverflow.com/questions/5494158/entity-framework-4-1-code-first-setinitializer-not-being-called-again-after-da and this https://stackoverflow.com/questions/5288996/database-in-use-error-with-entity-framework-4-code-first/5289296#5289296所以帖子。

我有什么

The [SetUp] method:

    [SetUp]
    public void SetUp()
    {
        // TenantSeedInitializer extends the 
        // DropCreateDatabaseAlways<TenantApplicationTestContext> class

        Database.SetInitializer(new TenantSeedInitializer());
        _applicationContext = new TenantApplicationTestContext();
        _applicationContext.Database.ExecuteSqlCommand("ALTER DATABASE " + 
            TenantApplicationTestContext.DatabaseName + 
            " SET SINGLE_USER WITH ROLLBACK IMMEDIATE");
    }

The [TearDown] method:

    [TearDown]
    public void TearDown()
    {
        SqlConnection.ClearAllPools();
    }

还有一个非常简单的测试:

    [Test]
    public void AddTenant()
    {
        // add a new tenant to the database and verify that there
        // there is only one tenant present in the table  
    }

正如我所说,连续多次运行此测试就像魅力一样,直到我尝试在 SqlServer 中打开表为止。

两种不同的(对我来说未解决的)错误场景

1) 要么我不允许查看该表,因为 Visual Studio 的连接仍然打开。

数据库“TestTenantDatabase”已打开,并且一次只能有一个用户。

添加SqlConnection.ClearAllPools();似乎没有解决这个问题。

2) 或者我被允许查看Sql Server中的表,然后我不再被允许从我的数据库中删除数据库[SetUp]固定装置。

无法删除数据库“TestTenantDatabase”,因为它当前正在使用。

关闭 Sql Server 是我知道摆脱这个问题的唯一方法。但后来我发现自己重新启动了 Sql Servera lot白天...(关闭数据库连接的选项也会有所帮助,但我找不到它)。

有人可以指导我完成这个吗?


这条信息:

数据库“TestTenantDatabase”已打开并且只能有一个 一次用户。

发生这种情况是因为您已将数据库设置为单用户。通常,您会执行此操作终止与数据库的其他连接,并使您的连接成为唯一可以访问该数据库的连接。但是,如果您更改数据库上下文,其他应用程序(例如 Visual Studio)可能会连接进来,并成为单个用户,从而有效地将您锁定。

在您的设置装置中尝试一下:

use TestTenantDatabase;
alter database TestTenantDatabase set single_user with rollback immediate;
use master;
drop database TestTenantDatabase;

如果你在数据库中设置了单用户,那么你就成为单用户了。然后,如果您更改为 master,然后删除同一批次中的数据库,它应该会击败任何尝试连接到该数据库的人。

另一种选择是设置脱机,而不是 single_user,但是,当您删除数据库时,它不会删除数据库 .mdf 和 .ldf(以及任何 .ndf)文件,因此您可能会在为另一个数据库重新创建数据库时遇到问题一组测试。

如果在运行 single_user 时遇到与死锁相关的错误,请将死锁优先级设​​置为高。如果您要重新使用该连接,可以在断开后将其恢复正常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体框架无法删除数据库,数据库正在使用中 的相关文章

  • 在 2 个 .c 文件之间共享函数

    dir1有dir2 file1 c和file1 h dir2 有 file2 c 现在 如果我想在 file2 c 中访问 file1 c 中定义的函数 我需要在 file1 h 中声明它并在 file2 c 中包含 file1 h 这是一
  • 如何将 CroppedBitmap 转换为 BitmapImage

    我正在尝试将 CroppedBitmap 转换为 BitmapImage 编辑 不使用内存流 我尝试过直接转换它 似乎这不是一个选择 这应该没那么难 我正在尝试剪切 BitmapImage 的一部分 并创建一个仅包含新裁剪的 Bitmap
  • 在异步方法中使用时 HttpClient 标头被清空

    我正在使用 NET Framework 4 6 1 我的 Web api 中有一个控制器 其中有静态 HttpClient 来处理所有 http 请求 在 IIS 上托管我的应用程序后 大约每月一次 我的应用程序的所有传入请求都会出现以下异
  • 多态性中基类缺少虚拟析构函数 = 资源泄漏?

    我们知道 如果要多态地使用基类 则需要将基类的析构函数指定为 virtual 否则程序中可能会出现资源泄漏 因为只会调用基类析构函数 而不会调用派生对象析构函数 我们还知道构造函数 析构函数纯粹是初始化 未初始化构造 而operator n
  • 如何处理作为参数传递到方法中的 Lambda 表达式 - C# .NET 3.5

    我对 Lambda 表达式的了解有点不稳定 虽然我可以编写使用 Lambda 表达式 又名 LINQ 的代码 但我正在尝试编写自己的方法 该方法采用一些 Lambda 表达式类型的参数 背景 我正在尝试编写一个方法 该方法从任何其他对象类型
  • 在 Windows 服务中使用 OleDb 从 Excel 读取数据?

    免责声明 我知道这是一种不好的做事方式 这是我们与客户的唯一选择 Problem 我们需要每隔 x 时间从 Excel 文件读取数据 数据通过第三方 Excel 插件不断变化 应用程序的环境是 Windows XP SP1 和 Net 2
  • MVVM 同步集合

    是否有一种标准化方法可以将 Model 对象集合与 C 和 WPF 中匹配的 ModelView 对象集合同步 我正在寻找某种类 可以使以下两个集合保持同步 假设我只有几个苹果 并且可以将它们全部保存在内存中 换句话说 我想确保如果我将 A
  • 命令中带空格的 Windows C 系统调用

    我无法使用名称和参数中的空格进行系统调用 例如 system c program files something example exe c my files example txt 我尝试过各种我知道的方法来逃避 但没有任何效果 我努力了
  • Selenium 和 xpath:查找带有类/id 的 div 并验证其中的文本

    我正在努力拥有xpath find a div并验证div有一个特定的string里面的文字 这是HTML div class Caption Model saved div and div class gwt HTML sfnStanda
  • 测试从 ComboBox 派生的自定义控件

    我创建了一个从 ComboBox 派生的控件 并希望对其行为进行单元测试 但是 它在我的单元测试中的行为似乎与实际应用程序中的行为不同 在实际应用程序中 Combobox DataSource 属性和 Items 同步 换句话说 当我更改
  • Linux C++ 调试器

    我正在寻找完美的 Linux C 调试器 我不期望成功 但搜索应该提供丰富的信息 我是一个非常有能力的 gdb 用户 但 STL 和 Boost 很容易压垮我的调试技能 并不是说我无法深入了解数据结构的内部结构 而是它需要很长时间 我通常会
  • 如何在 WCF 中反序列化自定义 SOAP 标头?

    我正在尝试向通过 WCF 的所有 SOAP 请求添加自定义标头 我发现这篇精彩的文章 http blogs msdn com b mohamedg archive 2012 10 21 adding custom soap headers
  • 解析通过asp:FileUpload上传的XML文件

    我有一个场景 用户将上传 XML 文件 我想将该文件添加到数据库中的表中 不过 困难的部分是我需要解析文件 然后将一些信息添加到一些不同的表中 显示如何获取 XML 文件的每个示例都使用 URI 来获取文件 但是如何直接从数据库获取文件 或
  • 第三方引用的 dll 未被复制来构建

    我有一个第三方 net dll 被我的 dll 类库项目 A 引用和使用 我的控制台应用程序项目 B 引用项目 A 我的问题是第三方 dll 没有被复制到控制台应用程序项目 B 的构建中 这里有什么问题呢 我的 dll 类库中引用的第三方
  • 将 R 值传递给采用 L 值的函数时出现过载歧义

    我有 2 个重载函数 一个采用 L 值 另一个采用 R 值 目的是让该函数可以像这样调用 Obj obj foo obj OR foo Obj 所以 我写了2个重载函数 template
  • 是否可以在 Eclipse 中为除 Java 之外的 Eclipse 编写插件?

    谁能帮我用c 写一个eclipse插件 weekens 和 celavek 感谢您提供的信息 我正在研究 JNI 并将尝试实现它 celavek 我们必须做什么样的主控 控制 在C 和java接口中处理是否风险更大 我的要求是在 Java
  • 由于表扫描,表值参数的性能较低

    我有一个将参数传递给 SQL 过程的应用程序 其中一个参数是表值参数 其中包含要包含在 where 子句中的项目 因为当我将 TVP 连接到具有 200 万行的表时 表值参数没有附加任何统计信息 所以查询速度非常慢 我还有什么选择 同样 目
  • 在 C# 中为 ListBox 分配数据源时,如何从 ListBox 中删除所选项目?

    在 C 中为 ListBox 分配数据源时 如何从 ListBox 中删除所选项目 尝试删除时出现错误 设置 DataSource 属性后 无法修改项目集合 但是当我尝试从数据源 数据表 中删除项目时 它会抛出错误 因为 数据行不在当前行集
  • 如何以一对一/零关系更新员工和身份用户

    我正在尝试更新员工记录 也想更新身份用户 如果我先单独更新身份用户 例如 UserManager Update user Context Entry employee State System Data Entity EntityState
  • 使用实体框架实现 if-not-exists-insert,无需竞争条件

    使用 LINQ to Entities 4 0 是否有正确的模式或构造来安全地实现 如果不存在则插入 例如 我目前有一个跟踪 用户收藏夹 的表 用户可以在其收藏夹列表中添加或删除文章 基础表不是真正的多对多关系 而是跟踪一些附加信息 例如添

随机推荐

  • Swift 中如何判断字母是字母数字还是数字

    我想计算以下字符串中字母 数字和特殊字符的数量 let phrase The final score was 32 31 I tried for tempChar in phrase if tempChar gt a tempChar lt
  • Notepad++ RegEx 替换为模式

    我想找到以下模式 Image not found Images IMG 20160519 WA0015 jpg 并替换为一些标记 包括上面文本中的图像名称 例如 a href IMG 20160519 WA0015 jpg img src
  • 如何在 Docker 容器中运行 R Shiny 应用程序

    我为 R Shiny 应用程序构建了 Docker 映像 并在 Windows 10 Home 上使用 Docker Toolbox 运行了相应的容器 当尝试使用网络浏览器打开应用程序时 仅显示索引 我不知道为什么应用程序没有执行 日志向我
  • 仅当项目不存在时才插入表中[重复]

    这个问题在这里已经有答案了 我的数据库有一个表名为fruit Table fruit id name 1 apple 2 orange 3 banana 4 grape id是主键 我想将条目添加到表中 但前提是它们尚不存在 查询 IF N
  • 对参数进行排序以利用柯里化

    我最近两次重构代码以更改参数的顺序 因为代码太多 黑客喜欢flip or x gt foo bar x 42正在发生 在设计函数签名时 哪些原则可以帮助我充分利用柯里化 对于轻松支持柯里化和部分应用的语言 有一系列令人信服的论点 最初来自
  • 如何将以 nil 结尾的字符串列表传递给 Objective-C 函数?

    函数 NSArray arrayWithObjects foo bar nil 将一个以 nil 结尾的字符串列表传递给函数 如果我想编写一个类似的函数 声明是什么样的 以及如何迭代字符串 I quote http developer ap
  • 我如何设置自己的 SVN

    我是 SVN 新手 如何设置我自己的 SVN 请给我完整的解决方案从头到尾 Go to http www visualsvn com http www visualsvn com 在您的服务器上下载并安装 Visualsvn 服务器 该网站
  • 如何使用 Lambda 访问 AWS API Gateway 请求的 HTTP 标头?

    我看到在API网关常见问题解答 https aws amazon com api gateway faqs 可以访问发送到 API 网关的请求标头 如果您已经使用 OAuth 令牌或任何其他授权 机制 您可以轻松设置API网关而不需要签名A
  • 是否可以在Android中的drawables中使用子文件夹? [复制]

    这个问题在这里已经有答案了 在我的应用程序中 我有几个图像文件夹和子文件夹 它们位于可绘制对象内 如何从可绘制子文件夹中检索图像 Example 可绘制 gt 动作 gt 体育 gt soccer png 我怎样才能得到这张 soccer
  • 在 Sublime Text 2 中获取键绑定文件中的文件路径 + 文件名

    我试图在 Sublime Text 2 的键绑定文件中获取当前文件的路径 文件名 不带扩展名 file path or file path 两者都不工作 原因是我想执行一个 exe 文件 该文件是之前构建的 但不想一步构建和执行 有任何想法
  • 如何将 .wav 格式的声音相互附加

    我正在自学C 通过阅读一些书籍和观看一些教程 因此 我决定同时做一个小项目 以获得更多经验并巩固我的知识 我正在尝试用格鲁吉亚语 我的语言 创建一个文本到语音程序 我在java中完成了相同的程序 但想在C 中传输它 但我无法理解如何将不同的
  • .net mvc 更新了 jquery 现在出现严重错误

    我今天通过 NuGet 更新了 jquery 现在收到以下错误 JavaScript critical error at line 1 column 11 http localhost 53779 Scripts jquery 1 9 0
  • 整数溢出 - 将 C# 转换为 VB.Net 代码

    从 C 到 VB Net 的代码转换出现问题 var x 5783615 var y 56811584 var t x y x y和t是整数 在 C 中 t 将为 15536 49728 在 VB Net 中 我会得到一个整数溢出异常 知道
  • PHP 和 MySQL 更新查询仅更新表中的最后一条记录

    我有一个 HTML 表单 用于通过后脚本更新 MySQL 表 但是 我遇到一个问题 即每行上的更新按钮仅适用于表中的最后一行
  • 如何在 TFS 2015 上删除/取消注册构建代理

    我已经使用专用服务器设置了 TFS 2015 来存储构建代理 但是 当我删除 TFS 2015 应用程序服务器上的构建代理时 它仍然显示在构建服务器上的 Windows 服务 中 现在构建服务器显示错误 因为服务存在但未运行 如何从 TFS
  • 使用正则表达式删除重复字符?

    假设我想使用正则表达式删除字符串中的所有重复字符 特定字符 这很简单 import re re sub a a aaaa gives a 如果我想用相应的字符替换所有重复的字符 即 a z 怎么办 我该怎么做呢 import re re s
  • JavaScriptSerializer - 自定义属性名称

    我正在使用 JavaScriptSerializer 来反序列化 json 数据 一切都运行良好 但我的问题是 json 数据中的一个属性名为 base 因此我无法在 C 代码中创建这样的属性 我发现我可以手动将值映射到构造函数中的属性 但
  • 从父类对象调用子类方法

    我有以下课程 class Person private String name void getName class Student extends Person String class void getClass class Teach
  • 字符串到日期时间转换 Bigquery

    我有一个源表 其中的日期以字符串格式存储 如下所示 1984 10 28 00 00 00 1988 11 22 00 00 00 1990 01 08 00 00 00 1983 06 22 00 00 00 然后创建一个表test1如下
  • 实体框架无法删除数据库,数据库正在使用中

    我 和许多其他人一样 遇到了这样的问题 我无法让我的 NUnit 测试删除数据库中的数据库 SetUp 我的测试装置 我想要实现什么 我想编写集成测试来测试我的代码并验证预期结果是否存储在数据库中 断言 CRUD 方法 那 and我希望能够