Datacontext.SaveChanges()将不需要的记录添加到数据库

时间:2014-09-30 11:28:22

标签: c# entity-framework

如果我不清楚我的问题,我会提前道歉,但我正在开展一个我还不太了解的项目,所以请随时要求详细说明某个部分。

现在我正在进行一项已经存在于项目中的测试,但是没有正常工作,即添加到数据库的数据没有被删除,并且在我还没有进行返工之前仍然使用了代码尚未分配。此时测试工作正常,但在运行后,数据库中仍有记录,甚至不应添加。

在代码中,您可以在此处找到 http://pastebin.com/YzRqi7dt ,您可以看到测试方法。 TestInitialize中添加的记录被正确删除,但在完成测试后,数据库中仍有4个记录太多。其中2个是testmethod中 ConexioContacts 的副本。我知道它是副本,因为我在调试期间的某个时刻注意到有8个联系人而不是4个。保留在数据库中的其他2个联系人看起来像是来自我的 Seed()方法,但Seed()方法不会被调用或任何东西。

期间添加这4条记录
List<Synchronizer<BaseContact, ExternalContact, ConexioContact>.ConexioEntitySyncContext> matches     =
            Synchronizer<BaseContact, ExternalContact, ConexioContact>
            .FindMatches(conexioEntities, externalEntities, _unitOfWork);

当它在后台进入DataContext.SaveChanges()时(在调试时发现)。上面的方法可以在这里找到:http://pastebin.com/t9iMGB31。 DataContext.SaveChanges()在方法结束时的UnitOfWork.SaveChanges()中被调用。

希望这很清楚,如果没有,请问。

亲切的问候, Gravinco

编辑:

Wyatt Earp建议的交易解决了问题,如果我运行我的测试,但我仍然不知道错误是如何或为何发生的,如果有人可以详细说明,我将非常感激。

1 个答案:

答案 0 :(得分:3)

您可以做的一件事就是将所有工作包装在事务中并在完成后将其回滚。这应该保持对数据库的任何更改。此外,它可能有助于找到问题,如果它可能来自不同的测试或其他...

TransactionScope transaction;对象添加到您的测试类中,并在TestInit()方法的开头添加transaction = new TransactionScope()。然后,您可以使用CleanTest()

替换transaction.Dispose();方法中的所有内容