2013-02-08 22 views
0

在Code-First實體框架中,是否有辦法修改事務行爲,以便它不會丟棄所有更改,而是將所有更改保留到故障點?如何修改EF Code First中的事務行爲

例如:

foreach {var objectToSave in ArrayOfEntityObjects) 
{ 
    MyContext.Insert(objectToSave); 
} 
try 
{ 
    MyContext.SaveChanges(); 
} 
catch (Exception x) 
{ 
    //handling code 
} 

在上述示例中,假設該陣列是100個對象的陣列,並且,關於項目50發生了錯誤,我想保持的是成功的那些,至至少有一點失敗。知道我們在foreach循環的每次迭代期間執行MyContext.SaveChanges()命令來執行此操作,但我們希望在一次提交中提交數據庫的性能提高(我們的理解是EF一次發送所有命令對於交易,通過單個連接,因此僅使用一次往返)。

+1

不,當您意識到錯誤時,事務已經回滾。我會承認20-50的大塊變化。無論如何,減少交易規模有時是有益的。 – 2013-02-08 13:59:02

+0

謝謝。這基本上是我們的想法。仍然希望有人知道一種方式。 – Gustyn 2013-02-09 02:11:54

回答

0

不,沒有辦法自動做到這一點。 EF在單個事務中提交所有更改,這意味着它是全部或全部事物。

如果您想要這種行爲,那麼您必須在添加每條記錄後保存更改。

原因是EF不知道數據中的「事務」是什麼。它可能是一行,也可能是幾個表中的幾行。英孚甚至不試圖瞭解您的交易要求可能是什麼。如果需要,您必須手動完成。