たとえば、イベントハンドラー用にこのコードがあります
public void ONDataArrived ( string data )
{
//do some processing and save it to DB using EF
ctx.Add ( x ) ;
ctx.SaveChanges () ;
}
このイベントが同時に数回発生した場合、EFがエラーになる可能性はありますか?
ありがとう
たとえば、イベントハンドラー用にこのコードがあります
public void ONDataArrived ( string data )
{
//do some processing and save it to DB using EF
ctx.Add ( x ) ;
ctx.SaveChanges () ;
}
このイベントが同時に数回発生した場合、EFがエラーになる可能性はありますか?
ありがとう
Entity Frameworkのコンテキストオブジェクトはスレッドセーフではないため、破損します。
イベントが並行して処理される場合に備えて、コンテキストを同期する必要があります。
EF 5は、使用方法に応じて、いくつかの異なるモデルで動作します。コンテキスト追跡エンティティ、自己追跡エンティティ、またはPOCOを使用するためのテンプレートがあります。あなたの場合、コンテキストオブジェクトを保持しないことをお勧めします。自己追跡エンティティはおそらくあなたが探しているものです-それらはデータベースを追跡するためにコンテキストに依存するのではなく、データベースを更新するために必要なすべての情報を内部に保存します。
自己追跡ルートを使用する場合、OnDataArrivedメソッドは新しいコンテキストオブジェクトを作成してエンティティを更新するだけで、weismatが言及したスレッドの問題にも対処します。