1

Web API 2を使用してデータベースに保存するメッセージオブジェクトを作成しています。このメッセージオブジェクトには、現在のユーザーがアプリケーションユーザータイプとして格納されている必要があります。現在のユーザーをWeb APIモデルのプロパティとして保存する方法

 var UserManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
     var currentUser = RequestContext.Principal; 
     var currentUserName = currentUser.Identity.Name; 
     var currentApplicationUser = UserManager.FindByName(currentUserName); 

     // I perhaps want to dispose of the user context? 
     // UserManager.Dispose(); 

     globalMessage.sentBy = currentApplicationUser; 
     db.GlobalMessages.Add(globalMessage); 

最後の行がエラーを投げている:An entity object cannot be referenced by multiple instances of IEntityChangeTracker.

はこの周りの他の方法はあります

私のコードは次のようになります。そうでなければ、私は想像して、私は現在のユーザーを取得するアクションを呼び出すことができます、このユーザーとのアクションから別のアクションにリダイレクトして、argとして更新を実行しますか?

答えて

0

問題は、すでに生きている別のコンテキストインスタンスに既に関連付けられているエンティティ(currentApplicationUser)をコンテキストに添付していることです。そのため、ソリューションは同じコンテキストを使用しているユーザーを見つけることができます私はそれを働い

var UserManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
    var currentUser = RequestContext.Principal; 
    var currentUserName = currentUser.Identity.Name; 
    var currentApplicationUser =db.AspNetUsers.FirstOrDefault(u=>u.UserName==currentUserName); 

    globalMessage.sentBy = currentApplicationUser; 
    db.GlobalMessages.Add(globalMessage); 
+0

おかげで、それはようなものになるだろう。私は3分前にそこにいるようにあなたのものを選ぶでしょう。あなたがそれを同じようにしたことを知りました。 – Sam

+1

あなたは私の友人を歓迎します;) – octavioccl

1

var currentUser = RequestContext.Principal; 
    var currentUserName = currentUser.Identity.Name; 
    var sender = db.Users.Where(u => u.UserName == currentUserName).FirstOrDefault(); 
    globalMessage.sentBy = sender; 
    db.GlobalMessages.Add(globalMessage); 
    db.SaveChanges(); 
関連する問題