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

时间:2016-02-20 18:28:28

标签: c# sql-server unit-testing entity-framework-6 rollback

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

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

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

寻找一些最小和最聪明的选择。在此先感谢:)

1 个答案:

答案 0 :(得分:3)

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

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

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

已编辑以回复最后评论

您可以使用重载的TransactionScope contructor来控制IsolationLevel,这样您就可以选择是否阅读未经修改的更改。

如果您的代理不在交易中,请检查connection string is the same,以便ado.net可以识别连接并在同一交易中登记连接。 如果连接字符串不相同,则可能需要激活分布式事务处理协调器。在这里您可以解释DTC scalation是如何发生的:TransactionScope automatically escalating to MSDTC on some machines?