我們正在考慮的批量上傳工作使用實體框架。因爲我們有興趣跟蹤每條記錄的單獨結果,所以我試圖找出插入的所有條目是否作爲事務的一部分完成,並且如果單個故障會導致回滾,或者如果有方法可以跟蹤結果每個單獨的結果。我正在考慮只循環遍歷項目並在每個項目上調用Save()並將其包裝在try/catch塊中,但只要調用上下文中的save()似乎更有效,如果我可以使用單個結果。實體框架查詢執行結果
謝謝!
我們正在考慮的批量上傳工作使用實體框架。因爲我們有興趣跟蹤每條記錄的單獨結果,所以我試圖找出插入的所有條目是否作爲事務的一部分完成,並且如果單個故障會導致回滾,或者如果有方法可以跟蹤結果每個單獨的結果。我正在考慮只循環遍歷項目並在每個項目上調用Save()並將其包裝在try/catch塊中,但只要調用上下文中的save()似乎更有效,如果我可以使用單個結果。實體框架查詢執行結果
謝謝!
默認情況下,在每次調用SaveChanges
待審覈的所有記錄都保存在一次時間。一個SaveChanges
通話中的所有操作都是一個事務(source)內,因此,如果一個特定的SaveChanges調用失敗,將回滾該特定呼叫的查詢,但顯然不是之前成功調用。
最終它取決於你在哪裏調用的SaveChanges爲你多少回退的獲得。有關如何擴展範圍的一些示例,您可以使用TransactionScope
延長交易的長度,請參閱this article。
我自己的經驗是調用的SaveChanges往往能真正降低性能,並延緩整個流程下來很多。但顯然等待時間過長可能意味着更大的內存佔用。我發現EF可以輕鬆處理幾千行而不會有太多內存問題。
配售代碼在一個try ... catch會幫助你,但你可能想看看實體驗證,你可以放置在對象上的限制,然後將生成的任何SQL之前,對對象進行驗證。
非常豐富的答案。謝謝,瑞恩! –