Entity Frameworkによって生成されるコンテキストオブジェクトは、スレッドセーフではありません。エンティティフレームワークのスレッドセーフティ
2つの別々のエンティティコンテキストを使用すると、スレッドごとに1つずつ(そしてそれぞれSaveChanges()
を呼び出します)、これはスレッドセーフなのでしょうか?
// this method is called from several threads concurrently
public void IncrementProperty()
{
var context = new MyEntities();
context.SomeObject.SomeIntProperty++;
context.SaveChanges();
}
私は、エンティティフレームワークのコンテキストはコンテキストの現在の値が新鮮であるかどうかを追跡する「カウンタ」変数のいくつかの並べ替えを実装して信じています。
- 上記のコードでは、別のスレッドから呼び出されます。インクリメント/セーブチェンジをロックする必要がありますか?
- もしそうなら、この単純なシナリオでこれを達成するための好ましい方法は何ですか?
* "コンテキストを受信することにより、あなたのリポジトリを変更する必要があるメソッドを呼び出して、非常に簡単な方法でそれを行うにはNinjectの拡張機能があり
http://elvanydev.com/EF-DbContextFactory/
Entity Frameworkはスレッドセーフではありません。 "* - なぜそれを言うのですか? – RPM1984
私はMSDNを参照しています:http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.aspx「ObjectContextクラスはスレッドセーフではありません。 – Harper
ええ、それは私があなたが意味すると思ったものです - 文脈であって実体ではありません。だからあなたはOCのためにシングルトンを使うべきではありません。 – RPM1984