繁体   English   中英

回滚对Entity Framework .NET中的数据库所做的更改

[英]Rollback changes made to Database in Entity Framework .NET

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

我正在使用Entity Framework 6来访问数据库。 底层数据库是SQL Server。 EF6是否有任何支持来实现这一目标?

目前我将更改存储在列表中,我将此列表用于清理数据库。 但是使用这种方法会随机留下一些残留物 我不确定原因,可能是一些竞争条件或其他原因。

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

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

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

但对于单元测试专家,您可以使用Effort - Entity Framework Unit Testing Tool来提供内存数据库操作。

已编辑回复最新评论

您可以使用重载的TransactionScope构造函数来控制IsolationLevel ,以便您可以选择是否读取未更改的更改。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM