假設我有一些保存方法。在每種方法的結尾調用_context.SaveChanges()
或在global.ascx文件中移動此方法並在應用程序生命週期結束時只調用它,有什麼更好的方法?對於性能目的是否重要?當我需要調用SaveChanges方法時?
我用EF和ASP.NET MVC
假設我有一些保存方法。在每種方法的結尾調用_context.SaveChanges()
或在global.ascx文件中移動此方法並在應用程序生命週期結束時只調用它,有什麼更好的方法?對於性能目的是否重要?當我需要調用SaveChanges方法時?
我用EF和ASP.NET MVC
在我看來,你應該把它的每個更新方法的結束。否則,如果您更改了對象並且未保存該對象,則該對象將不會在數據庫中更新,直到應用程序結束。如果另一個進程從數據庫請求該對象,它將不會有最新的更改。如果此過程也修改此對象,然後將其保存在應用程序的末尾,您甚至會得到一個OptimisticConcurrencyException。
上下文不是線程安全的。所以對上下文的多次更改可能會引發錯誤。
我處理這個問題的方式是兩種方法之一。控制器/存儲庫和每種方法。我沒有看到任何性能受到任何影響。除非只有2-3種使用EF的方法,否則我已閱讀的大多數書籍都傾向於存儲庫風格。
我定義了這樣的事情我的課
SomeContext context = new SomeContext();
在此之前有我也有這樣的方法。
public void Save()
{
context.SaveChanges();
}
如果你想,當我調用保存方法去做每方法是這樣的
using (var context = new SomeContext())
{
// somecode
}
好了,但後來我重新創建上下文(和SQL連接)每次。我認爲這對性能沒有好處(如果我有更多的保存方法) – Neir0