いくつかの保存方法があるとします。_context.SaveChanges()
各メソッドの最後に呼び出す方法と、このメソッドを global.ascx ファイルに移動してアプリのライフサイクルの最後にのみ呼び出す方法のどちらが良いでしょうか? パフォーマンスの目的にとって重要ですか?
EF と ASP.NET MVC を使用しています
いくつかの保存方法があるとします。_context.SaveChanges()
各メソッドの最後に呼び出す方法と、このメソッドを global.ascx ファイルに移動してアプリのライフサイクルの最後にのみ呼び出す方法のどちらが良いでしょうか? パフォーマンスの目的にとって重要ですか?
EF と ASP.NET MVC を使用しています
私の意見では、それを各更新メソッドの終わりと呼ぶ必要があります。それ以外の場合、オブジェクトを変更して保存しなかった場合、アプリケーションが終了するまでオブジェクトはデータベースで更新されません。別のプロセスがデータベースからこのオブジェクトを要求した場合、最新の変更はありません。このプロセスでもこのオブジェクトを変更し、アプリケーションの最後に保存すると、OptimisticConcurrencyExceptionが発生することもあります。
コンテキストはスレッドセーフではありません。そのため、コンテキストに複数の変更を加えると、エラーがスローされる可能性があります。
これを処理する方法は、2 つの方法のいずれかです。コントローラ/リポジトリおよびメソッドごと。どちらの方法でもパフォーマンスが低下したことはありません。私が読んだ本のほとんどは、EF を使用するメソッドが 2 ~ 3 つしかない場合を除き、リポジトリ スタイルに傾いています。
クラスの前にこのようなものを定義します
SomeContext context = new SomeContext();
次に、このような方法がありますか。
public void Save()
{
context.SaveChanges();
}
メソッドごとにやりたい場合は、次のようにします
using (var context = new SomeContext())
{
// somecode
}