【问题标题】:Questions regarding Behavior of TransactionScope for Database in .NET有关 .NET 中数据库的 TransactionScope 行为的问题
【发布时间】:2016-02-24 07:10:50
【问题描述】:
我正在使用 TransactionScope 执行测试方法。 我希望在测试方法执行期间对数据库所做的所有更改最终都回滚到以前的状态。
为了实现这一点,我没有在 Scope 末尾写 scope.Complete()。
我的问题:
当我最后不写transaction.Complete(); 时,dbContext.Savechanges() 对数据库所做的更改是否会被还原?
【问题讨论】:
标签:
c#
entity-framework-6
transactionscope
msdtc
data-cleaning
【解决方案1】:
方法是否正确?
使用 EF,您不能使用 Tx 范围,也不能保存更改。取决于您要测试的内容 - 如果不编写数据库,您可能不会发现模型错误。
是否需要添加 dbContext.SaveChanges();
取决于您是否希望发生这种情况。
是否有必要将更改写入数据库,以便其他人可以使用数据
例行公事?
恕我直言,你问我们什么?你应该知道你想要什么。对于单元测试,通常情况并非如此——但对于集成测试,情况可能是这样。你必须知道。当这里的人们出现并寻求建议时,我总是感到惊讶,而忽略了这样一个事实,即我也可以在没有他们提供任何信息的情况下掷骰子。嘿,告诉我从我住的地方到我想去的公司办公室的路线。我不会告诉你我住在哪里,也不会告诉你我想去哪里,但请告诉我如何开车去那里。明白了吗?
我在测试方法中使用了两个不同的数据库。我可以访问
一个 AviTrackEntities 但不是另一个 ImportDataEntities。
那么你的代码有问题,或者你的配置有问题。你有没有学过如何制作错误报告?它涉及分析和发布错误。没有任何信息,我们怎么知道?
代码中是否有任何缺陷或我遗漏了什么?
您完全错过的是我们无法访问源代码、机器和您的大脑。我们无法为您制作基本的错误报告。给定信息 - 修复它。是的,出了点问题。什么 - 没有线索。你宁愿不帮助我们帮助你。
由于数据库的持久性,数据库单元测试非常复杂。将数据库重置为已知的启动状态可能很复杂。