2012-10-25 152 views
1

我們正在考慮的批量上傳工作使用實體框架。因爲我們有興趣跟蹤每條記錄的單獨結果,所以我試圖找出插入的所有條目是否作爲事務的一部分完成,並且如果單個故障會導致回滾,或者如果有方法可以跟蹤結果每個單獨的結果。我正在考慮只循環遍歷項目並在每個項目上調用Save()並將其包裝在try/catch塊中,但只要調用上下文中的save()似乎更有效,如果我可以使用單個結果。實體框架查詢執行結果

謝謝!

回答

3

默認情況下,在每次調用SaveChanges待審覈的所有記錄都保存在一次時間。一個SaveChanges通話中的所有操作都是一個事務(source)內,因此,如果一個特定的SaveChanges調用失敗,將回滾該特定呼叫的查詢,但顯然不是之前成功調用。

最終它取決於你在哪裏調用的SaveChanges爲你多少回退的獲得。有關如何擴展範圍的一些示例,您可以使用TransactionScope延長交易的長度,請參閱this article

我自己的經驗是調用的SaveChanges往往能真正降低性能,並延緩整個流程下來很多。但顯然等待時間過長可能意味着更大的內存佔用。我發現EF可以輕鬆處理幾千行而不會有太多內存問題。

配售代碼在一個try ... catch會幫助你,但你可能想看看實體驗證,你可以放置在對象上的限制,然後將生成的任何SQL之前,對對象進行驗證。

+0

非常豐富的答案。謝謝,瑞恩! –