如果我不清楚我的問題,但是我正在處理一個我還不太瞭解的項目,請提前致歉。某個部分。Datacontext.SaveChanges()將不需要的記錄添加到數據庫中
現在我正在進行一個已經存在於項目中的測試,但沒有正確工作,即添加到數據庫的數據沒有被刪除,並且仍然使用來自返工之前的代碼尚未分配。此時此測試正常運行,但在運行之後,數據庫中的記錄應該不會被添加。
在代碼中,您可以在這裏找到http://pastebin.com/YzRqi7dt,您可以看到測試方法。 TestInitialize中添加的記錄被正確刪除,但在完成測試後,數據庫中仍有4條記錄太多。其中2個是測試方法中的ConexioContacts的副本。我知道它是複製的,因爲我在調試期間注意到有8個聯繫人被添加,而不是4個。其他2個聯繫人仍然在數據庫中看起來像他們來自我的種子()方法,但種子)方法不會被調用或任何東西。
的這些4個記錄加法當它進入在後臺DataContext.SaveChanges()
(在調試時發現)期間
List<Synchronizer<BaseContact, ExternalContact, ConexioContact>.ConexioEntitySyncContext> matches =
Synchronizer<BaseContact, ExternalContact, ConexioContact>
.FindMatches(conexioEntities, externalEntities, _unitOfWork);
發生。上面的方法可以在這裏找到:http://pastebin.com/t9iMGB31。 DataContext.SaveChanges()在方法結尾處的UnitOfWork.SaveChanges()中被調用。
希望這很清楚,如果沒有,請詢問。
隨着親切的問候, Gravinco
編輯:如果我跑我的測試,但我仍然不知道如何或爲何出現錯誤
通過懷亞特厄普提出的交易解決問題,如果有人可以詳細說明一下,我會很感激。
嘿懷亞特,謝謝你respobnding。問題不是由另一個測試引起的,因爲我只運行我在我的問題中給出的測試。我也發現開始將這些記錄添加到我的DataContext的行是unitOfWork.RepositoryAsync().Insert(insertConexioEntity);在foreach循環中。在這種情況下,你的建議是否仍然可以解決問題?還是我理解你完全錯了? –
Gravinco
2014-09-30 13:03:54
我沒有看到那行(在你的pastebin鏈接中),所以我無法確定。但是,只要數據庫交互全部發生在事務中,那麼這些更改就不應該保存到數據庫中。 – 2014-09-30 13:15:03
我提到的這行是在我給第二個鏈接的第52行的else子句末尾。 然後我會嘗試這個事務,看看它是否有效。我會及時向大家發佈。 – Gravinco 2014-09-30 13:25:09