回滚对实体框架 .NET 中的数据库所做的更改

本文关键字:数据库 实体 框架 NET | 更新日期: 2023-09-27 18:35:34

我正在编写用于测试框架的单元测试用例。单元测试在现有数据库中添加和修改数据。测试完成后,我需要回滚对数据库所做的所有更改,即删除添加的行并还原修改的行。

我正在使用实体框架 6 来访问数据库。基础数据库是 SQL Server。EF6 是否提供任何支持来实现此目的?

目前,我正在将更改存储在列表中,并参考此列表以清理数据库。但是使用这种方法会随机留下一些残留物。不过我不确定原因,也许是一些比赛条件或其他什么。

寻找一些最小和聪明的替代品。提前致谢:)

回滚对实体框架 .NET 中的数据库所做的更改

您可以将测试包装在事务中,并且不提交更改:

using (TransactionScope scope = new TransactionScope()) {
    //do your stuff
}

但是对于单元测试计划,您可以使用提供内存中数据库操作的工作量 - 实体框架单元测试工具。

已编辑以回复最后的评论

您可以使用重载的事务范围构造器来控制隔离级别,因此您可以选择是否读取未提交的更改。

如果您的代理不在事务中,请检查连接字符串是否相同,以便 ado.net 可以识别连接并在同一事务中登记连接。如果连接字符串不同,则可能需要激活分布式事务处理协调器。这里有一个解释 DTC 扩展是如何发生的:在某些计算机上,事务范围自动升级到 MSDTC?