2017-01-12 3 views
0

を更新中。エンティティオブジェクトは、IEntityChangeTrackerの複数のインスタンスによって参照することはできません - 私はEkipaIdと呼ばれる、identitymodelにカスタムフィールドを更新しようとしているidentitymodelテーブル

 public ActionResult JoinTeam(int id) 
    { 
     ApplicationDbContext db = new ApplicationDbContext(); 
     var currentUserId = User.Identity.GetUserId(); 
     var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())); 
     var currentUser = manager.FindById(User.Identity.GetUserId()); 

     currentUser.EkipaId = id; 
     db.Users.Attach(currentUser); 
     db.Entry(currentUser).State = System.Data.Entity.EntityState.Modified; 
     db.SaveChanges(); 
     return RedirectToAction("Ekipa", "Home"); 
    } 

私はurl/Home/JoinTeam/1に行きますが、例外があります。 は、私は、現在のユーザーを見つけ、そしてURLにあったIDにEkipaIdを設定します。 「エンティティオブジェクトはIEntityChangeTrackerの複数のインスタンスで参照できません」というメッセージが表示される

オブジェクトのデタッチについては読んでいますが、以前は添付されていません。

+0

に依存性注入を見て、あなたはそれをあなたが最初に実行したときに入手できますか?複数回実行しているときに問題を引き起こすDbContextを破棄しているわけではありません。編集:またはい、私はそれ、私はそれを初めて実行取得あなたの 'UserManager' – Mats391

+0

にあなたの作成したコンテキスト' db'を渡します。どのように私はusermanagerにそれを渡すのですか? – Ashley

答えて

1

あなたはDbContextを配置してものUserManagerが同じインスタンスを使用する必要があります。

public ActionResult JoinTeam(int id) 
{ 
    using(ApplicationDbContext db = new ApplicationDbContext()) 
    { 
     var currentUserId = User.Identity.GetUserId(); 
     var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db)); 
     var currentUser = manager.FindById(User.Identity.GetUserId()); 

     currentUser.EkipaId = id; 
     db.Users.Attach(currentUser); 
     db.Entry(currentUser).State = System.Data.Entity.EntityState.Modified; 
     db.SaveChanges(); 
     return RedirectToAction("Ekipa", "Home"); 
    } 
} 

ただし、このようなDbContextの作成はお勧めしません。 ASP.Net https://www.asp.net/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4-dependency-injection

+0

は、それが動作、ありがとうございます。 – Ashley

関連する問題

 関連する問題