2017-03-03 12 views
1

私はページを作成しましたasp.net MVCデータベースにレコードを挿入するためのプレビューボタンを提供しています。それを保存します。私はプレビューページにモデルを渡すためにセッションを使用しています。プレビューページでは、データベースにセッション中のモデルを保存するボタンを作成しましたが、例外がスローされています"エンティティオブジェクトはIEntityChangeTrackerの複数インスタンスで参照できません"。 私は同じdbContextを使用しています。私はユーザーから与えられた多くのソリューションを試しましたが、私のために働いていません。私は例外をスローしているコードの部分を添付しています。私が間違っているところを見てください。ここで 作成:エンティティオブジェクトをIEntityChangeTrackerの複数のインスタンスで参照することはできません

は、私は、レコード

var model = Session[Constants.SessionVariables.ProjectModelForPreview] as Project; 
if (create != null) 
{ 
    if (model.Id == 0) 
    { 
     if (model.IsFeatured) 
     { 
      foreach (var item in dbContext.Projects.Where(p => p.IsFeatured == true)) 
      { 
       item.IsFeatured = false; 
      } 
      dbContext.SaveChanges(); 
     } 

     dbContext.Entry(model).State = EntityState.Unchanged; 
     dbContext.SaveChanges(); 
     TempData["SuccessMessage"] = "Project created successfully."; 
     return RedirectToAction("Index"); 
    } 
} 
+0

にあなたが同じコンテキストを使用していないことを保存しますあなたは次のリクエストで同じコンテキストを取得しますか? –

+0

私はコンテキストを宣言したベースコントローラーを使用しています –

+2

最初にレコードを作成してセッションに保存すると、別のコンテキストでそれをアタッチしようとしたときに2回目にエラーが発生することがあります。もし私が何かを見逃していなければ、あなたはもっと大きな問題を抱えています。 –

答えて

1

あなたのコントローラを保存していたコードであるため、あなたのDbContextは、リクエストごとにインスタンス化されます。だからあなたのアプリケーションは、この流れを、次のとおりです。

  • リクエスト1は、あなたがこのエンティティが追跡されている、と実体自体はDbContext 1
  • への参照を保持しているDbContext 1を介してエンティティをロードDbContext 1.
  • をインスタンス化このエンティティをセッションに保存し、古いDbContextを有効にします。これは、デフォルトのセッション状態がInProcで動作し、シリアル化では機能しないために機能します。
  • 要求2が入り、DbContext 2がインスタンス化されます。
  • エンティティはセッションから取得されます。
  • DbContext 2によってDbContext 1によって追跡されているエンティティを保存しようとします。これはスローされます。

は今すぐ解決するためのさまざまなアプローチがあります

  • は、すべてのセッション内のエンティティを保存しないでください。それらを持続させ、連続した要求でそれらを再び見る。
  • エンティティを手動でシリアル化してセッションに保存します。
  • .AsNoTracking()でエンティティを読み込みます。
1

のは、今のところ、元の問題を無視してみましょうあなたは、コード

1をリファクタリング一度あなたが要求間で同じコンテキストを使用しているいくつかの理由で、停止した場合、それは)解決されます。 (あなたはやっているとは思わない)

2)セッションに追跡対象のエンティティを保存しない* GoogleでEFの追跡方法を確認するにはgoogleで検索してください。

3)再び1及び2

*使用.AsNoTracking()を読んだり、私たちを見る...新しいモデルにあなたのエンティティを投影し、セッション

関連する問題