【发布时间】:2015-10-12 06:38:20
【问题描述】:
为了进一步专业化我们的测试方法,我正在使用 Visual Studio 中的单元测试框架进行一些集成测试。
被测对象是一个 WCF 服务,我的小应用使用 ServiceHost 在内存中运行该服务,并且我能够调用测试中公开的方法。
这一切都很好,但我希望能够在使用 Transactions 进行测试后恢复数据库。为了实现这一点,我在被测方法中添加了 TransactionScopeRequired 属性,并尝试在 TransactionScope 中调用它。
但后来我注意到 TransactionScope 没有内置的回滚方法,所以在方法完成后,创建的对象当然还在数据库中。
所以我尝试不使用“完成”方法,经过一番谷歌搜索后,我发现手动使用 Dispose 应该回滚事务。唉,两者都不起作用。所以我继续启动 SQL Server Analyzer 来查看生成的 SQL,也许我可以在其中找到一些 TRANSACTION 语句。
我注意到的第一件事是所有相关查询都作为存储过程(由 EF 生成)执行。第二件事是我无法区分相关查询中的任何类型的事务管理。
现在我的问题:无论好坏,这可以在这个层面上解决吗?如果有怎么办?是否可以使用这样的“外部”交易?
【问题讨论】:
-
有一个问题:你只使用一层事务吗? (根据经验,当您在交易中进行交易时会变得非常复杂,因为您需要启用远程交易才能使其正常工作)
-
另请注意,如果您回滚事务,则不会重置您的身份列从自动生成中获取的值,即您不能真正根据测试中正确生成的 id 进行假设。跨度>
标签: c# sql-server entity-framework wcf transactions