C# SaveChanges()将不需要的记录添加到数据库中

C# SaveChanges()将不需要的记录添加到数据库中,c#,entity-framework,C#,Entity Framework,如果我不清楚我的问题,但我正在做一个我还不太了解的项目,我会提前道歉,所以请随意要求详细说明某个部分 现在,我正在进行一项测试,该测试已经存在于项目中,但没有正常工作,即添加到数据库中的数据没有被删除,并且在我尚未分配任务时,它仍然使用返工之前的代码。此时测试工作正常,但在它运行之后,数据库中仍保留着一些不应该添加的记录 在这里可以找到的代码中,您可以看到测试方法。在TestInitialize中添加的记录已被正确删除,但在完成测试后,数据库中仍有4条记录过多。其中2份是testmethod中C

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

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

在这里可以找到的代码中,您可以看到测试方法。在TestInitialize中添加的记录已被正确删除,但在完成测试后,数据库中仍有4条记录过多。其中2份是testmethod中ConexicoContacts的副本。我知道这是副本,因为在调试过程中的某个点上,我注意到添加了8个联系人,而不是4个。数据库中剩下的另外两个联系人看起来像来自我的Seed()方法,但是Seed()方法没有被调用或其他任何东西

这4条记录的添加发生在

List<Synchronizer<BaseContact, ExternalContact, ConexioContact>.ConexioEntitySyncContext> matches     =
            Synchronizer<BaseContact, ExternalContact, ConexioContact>
            .FindMatches(conexioEntities, externalEntities, _unitOfWork);
列表匹配=
同步器
.查找匹配项(实体、外部实体、工作单元);
当它在后台进入
DataContext.SaveChanges()
时(在调试时发现)。可以在此处找到上面的方法:。在方法末尾的UnitOfWork.SaveChanges()中调用DataContext.SaveChanges()

希望这是明确的,如果没有,请询问

致以亲切的问候, 格拉文科

编辑:


如果我运行测试,Wyatt Earp建议的事务可以解决问题,但我仍然不知道错误是如何发生的或为什么发生的,如果有人能详细说明,我将不胜感激。

您可以做的一件事是将事务中的所有工作打包,并在完成后回滚。这将防止任何更改影响数据库。此外,如果问题可能来自不同的测试或其他原因,它可能有助于定位问题


添加
TransactionScope事务对象到测试类,在
TestInit()
方法的开头,只需执行
transaction=newtransactionscope()
。然后,您可以将
CleanTest()
方法中的所有内容替换为
transaction.Dispose()

嘿,怀亚特,谢谢你的回复。这个问题不是由另一个测试引起的,因为我只运行我在问题中给出的测试。我还发现,开始将这些记录添加到我的DataContext的行是unitOfWork.RepositoryAsync().Insert(InsertContenty);在foreach循环中。在这种情况下,你的建议还能解决问题吗?还是我完全错了?我看不出那条线在哪里(在你的pastebin链接中),所以我不能确定。但是,只要数据库交互都发生在事务中,那么就不应该将更改保存到数据库中。我会试试这个交易,看看是否有效。我会通知你的。@Gravinco啊,对不起,我没有看到第二个链接。是的,因为该对象被传递到方法中,所以它应该与事务的其余部分一起回滚。好的,该事务为测试工作,明天如果我进入FindMatches()中,我将尝试查看代码是否仍然正常工作方法,以查看问题是在于测试还是代码本身。无论如何,谢谢:-)