1. ホーム
  2. c#

[解決済み] セッション内で他のスレッドが実行されているため、新規トランザクションは許可されません LINQ To Entity [重複]。

2022-05-07 14:58:19

質問

なぜこれが壊れるのか、何か思い当たることはありますか?

foreach (var p in pp)
{
    ProjectFiles projectFile = (ProjectFiles)p;
    projectFile.Status = Constants.ProjectFiles_ERROR;
    projectFile.DateLastUpdated = DateTime.Now;
    context.SaveChanges();
}

この問題を回避するには、foreachループの前に結果を一度に取得することだと読みました。

しかし、私はそれをしなかった? "pp" は私の場合、結果のコレクションです。

解決方法は?

その pp 変数はオブジェクトのコレクションではなく、オブジェクトを返すことができる列挙体なのです。列挙器を使用する間、ソースは開いたままでなければなりません。

を使用します。 ToList メソッドを使用して、列挙者をコレクションに実現します。これにより、列挙子からすべての項目を読み取り、ソースへの接続を閉じることができますので、その接続を他のことに使用することができます。

foreach (var p in pp.ToList())