[英]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.