2011-06-29 88 views
0

我有一個用戶表,它具有與警報表的多對多關係。創建成員用戶後,我在數據庫中添加了一些額外的信息。實體框架:一個實體對象不能被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, 引用,但閱讀這些評論 和建議後,我一個還沒有找到一個 溶液或我得到 此錯誤的原因。

如果你真的搜索到了,你應該已經知道錯誤說你的對象圖中的某個實體已經連接到其他上下文。因爲你的代碼示例大多不相關。真正重要的代碼被包裹在你的方法中 - 可能是SetAlertsuserRepository.Add。如果這兩個方法使用內部上下文,並且它們不使用同一個實例,那麼這就是你的例外的原因。

+1

好吧,現在就明白了。謝謝,作爲參考這裏是我做的:在SetAlerts方法中,我有一個查詢來獲取警報(AlertType alert = 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

相關問題