Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 何时需要调用SaveChanges方法?_Asp.net Mvc_Entity Framework 4 - Fatal编程技术网

Asp.net mvc 何时需要调用SaveChanges方法?

Asp.net mvc 何时需要调用SaveChanges方法?,asp.net-mvc,entity-framework-4,Asp.net Mvc,Entity Framework 4,假设我有一些保存方法。在每个方法的末尾调用\u context.SaveChanges(),或者在global.ascx文件中移动此方法,并在应用程序生命周期结束时仅调用一次,这样做更好吗?它对性能目标重要吗 我使用EF和ASP.NET MVC在我看来,您应该将其称为每个更新方法的结束。否则,如果更改了对象而未保存,则在应用程序结束之前,该对象不会在数据库中更新。如果另一个进程从数据库请求此对象,它将不会有最新的更改。如果此进程还修改此对象,然后在应用程序结束时保存它,您甚至会得到一个Optim

假设我有一些保存方法。在每个方法的末尾调用
\u context.SaveChanges()
,或者在global.ascx文件中移动此方法,并在应用程序生命周期结束时仅调用一次,这样做更好吗?它对性能目标重要吗


我使用EF和ASP.NET MVC

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

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

我处理这件事的方式有两种。控制器/存储库和每个方法。我没有看到任何性能击中任何方式。我读过的大多数书都倾向于存储库风格,除非你只有2-3种使用EF的方法

我在上课前定义了这样的东西

SomeContext context = new SomeContext();  
那么我有一个这样的方法

public void Save()
{
    context.SaveChanges();
}
如果你想用这样的方法来做

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

好的,但我每次调用save方法时都会重新创建上下文(和sql连接)。我认为这对性能不好(如果我有不止一种保存方法)