2011-06-29 15 views
0

私は、アラートテーブルと多対多の関係を持つユーザーテーブルを持っています。 Membershipユーザーを作成した後、データベースに追加情報を追加します。Entity Framework:IEntityChangeTrackerの複数のインスタンスでエンティティオブジェクトを参照することはできません

MembershipCreateStatus createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email); 

if (createStatus == MembershipCreateStatus.Success) { 
User user = new MidTier.Models.User(); 
user.FullName = model.FullName; 
if (Alerts.Count() > 0) 
    { 
    var userAlerts = SetAlert(Alerts); // creates an IEnumerable of Alerts (from a list of int) 
    foreach (var alert in userAlerts) 
     { 
      user.Alerts.Add(alert);     //add each alert to the user 
      }      
    } 
    userRepository.Add(user); //throwing error 
    userRepository.Save(); 
} 

私は、Addメソッドを呼び出すには(「エンティティオブジェクトがIEntityChangeTrackerの複数のインスタンスによって参照することはできません。」)エラーが発生します。あまりにもこのエラーについては、ここではネット上の参照がたくさんありますが、これらのコメントや提案をすべて読んだら、解決策が見つからなかったり、このエラーが表示されます。

答えて

2

が ここでもSO、 にネット上でこのエラーについての言及はたくさんあるが、これらすべてのコメント や提案を読んだ後、私はhaventはは 溶液または私は このエラーになっていた理由を見つけました。

オブジェクトグラフの一部のエンティティが他のコンテキストに既に添付されているというエラーが表示されていることがわかりました。そのため、コードサンプルはほとんど関連しません。本当に重要なコードは、おそらくSetAlertsuserRepository.Addのように、あなたのメソッドにラップされています。これらの2つのメソッドが内部的なコンテキストを使用していて、同じインスタンスを使用していない場合、それが例外の理由です。

+1

さて、今すぐお試しください。ありがとう、私は何を参照しています:SetAlertsメソッドで、私はアラート(AlertTypeアラート= alertRepository.First(a => a.ID == alertId);)を取得するクエリを持っていた。そのアラートを解除する必要がありました(alertRepository.Detach(alert);)。私は汎用リポジトリクラス(http://blog.inetux.net/post/Entity-Framework-4-Series-Generic-Repository.aspx)を使用しています。 – robasta

+0

これで、保存すると、新しいユーザーと新しい警告。私は別の質問としてここに追加しました:http://stackoverflow.com/questions/6533440/entity-framework-many-to-many-relationship – robasta

関連する問題