2012-10-05 59 views
0

假設我有一些保存方法。在每種方法的結尾調用_context.SaveChanges()或在global.ascx文件中移動此方法並在應用程序生命週期結束時只調用它,有什麼更好的方法?對於性能目的是否重要?當我需要調用SaveChanges方法時?

我用EF和ASP.NET MVC

回答

0

在我看來,你應該把它的每個更新方法的結束。否則,如果您更改了對象並且未保存該對象,則該對象將不會在數據庫中更新,直到應用程序結束。如果另一個進程從數據庫請求該對象,它將不會有最新的更改。如果此過程也修改此對象,然後將其保存在應用程序的末尾,您甚至會得到一個OptimisticConcurrencyException。

0

上下文不是線程安全的。所以對上下文的多次更改可能會引發錯誤。

我處理這個問題的方式是兩種方法之一。控制器/存儲庫和每種方法。我沒有看到任何性能受到任何影響。除非只有2-3種使用EF的方法,否則我已閱讀的大多數書籍都傾向於存儲庫風格。

我定義了這樣的事情我的課

SomeContext context = new SomeContext(); 

在此之前有我也有這樣的方法。

public void Save() 
{ 
    context.SaveChanges(); 
} 

如果你想,當我調用保存方法去做每方法是這樣的

using (var context = new SomeContext()) 
{ 
    // somecode 
} 
+0

好了,但後來我重新創建上下文(和SQL連接)每次。我認爲這對性能沒有好處(如果我有更多的保存方法) – Neir0

相關問題