マルチスレッドのログをDBに保存しようとしていますが、次のエラーが発生します。そのセッションで実行中の他のスレッドがあるため、許可されません。各トレッドでセッションに他のスレッドが実行中であるため、Entity Frameworkの新しいトランザクションが許可されていません。マルチスレッド保存
私はこの機能を持っている:
internal bool WriteTrace(IResult result, string message, byte type)
{
SPC_SENDING_TRACE trace = new SPC_SENDING_TRACE(
message,
Parent.currentLine.CD_LINE,
type,
Parent.currentUser.FULLNAME,
Parent.guid);
Context.SPC_SENDING_TRACE.AddObject(trace);
if (Context.SaveChanges(result) == false)
return false;
return true;
}
コンテキストは、スレッドごとに異なりますが、DBとの接続は常に同じです。
この問題を解決する方法はありますか?コンテキストが配置されているクローズドブラケット後
using(var ctx = new MyContext()) {
//do transaction here
}
:
はあなたが各トランザクションのコンテキストを作成し、それを配置する必要があり、あなたはこのようにそれを行うことができますあなたの アンドレア
メインアプリケーション(マルチスレッドではありません)には別のコンテキストがありますが、マルチスレッドが実行されているときには書き込み中ではありません。それでも問題が発生する可能性はありますか? – andrea
@andreaあなたの主なアプリケーションに別のコンテキストがない場合は、dbから何かをリクエスト、追加、削除、または更新する必要があるときにコンテキストを作成してみてください。 ** single ** transaction。それが修正されない場合は、 'context.SaveChanges()'に 'lock'を追加してください。それが助けてくれることを願っていますが、私は確かにそうは思いませんが、幸いです!とにかく返信してください;) – ecampver
@andrea最後のコメントを忘れて、最初に私の答えを更新してください。 – ecampver