当我需要调用SaveChanges方法?

时间:2012-10-05 13:45:22

标签: asp.net-mvc entity-framework-4

假设我有一些保存方法。在每个方法的最后调用_context.SaveChanges()或在global.ascx文件中移动此方法并在应用程序生命周期结束时调用它的更好方法是什么?性能目的是否重要?

我使用EF和ASP.NET MVC

2 个答案:

答案 0 :(得分:0)

在我看来,你应该把它称为每个更新方法的结尾。否则,如果您更改了对象而未保存它,则在应用程序结束之前,不会在数据库中更新该对象。如果另一个进程从数据库请求此对象,则它将不具有最新更改。如果此过程也修改了此对象,然后在应用程序结束时保存它,您甚至会得到一个OptimisticConcurrencyException。

答案 1 :(得分:0)

上下文不是线程安全的。因此,对上下文的多次更改可能会引发错误。

我处理这种方式的方式有两种。控制器/存储库和每个方法。我没见过任何表现。除非您只有2-3种使用EF的方法,否则我阅读的大部分书籍都倾向于存储库样式。

我在课前定义了类似的内容

SomeContext context = new SomeContext();  

然后我有这样的方法。

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

如果你想按照这样的方法做到这一点

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