【问题标题】:Entity Framework: An entity object cannot be referenced by multiple instances of IEntityChangeTracker实体框架:一个实体对象不能被多个 IEntityChangeTracker 实例引用
【发布时间】:2011-06-29 10:36:29
【问题描述】:

我有一个 User 表,与 Alerts 表具有多对多关系。创建会员用户后,我将一些额外的信息添加到数据库中。

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 实例引用。')。即使在 SO 上,网上也有很多关于此错误的参考资料,但在阅读了所有这些 cmets 和建议后,我还没有找到解决方案或出现此错误的原因。

【问题讨论】:

    标签: c# asp.net-mvc entity-framework asp.net-membership


    【解决方案1】:

    有很多关于 网络上的这个错误,即使在 SO 上, 但是在阅读了所有这些cmets之后 和建议,我还没有找到 解决方案或我得到的原因 这个错误。

    如果您真的进行了搜索,您应该已经知道该错误表示您对象图中的某些实体已经附加到其他上下文。因此,您的代码示例大多不相关。真正重要的代码包含在您的方法中——可能是SetAlertsuserRepository.Add。如果这两种方法使用内部上下文并且它们不使用相同的实例,那么这就是您的异常的原因。

    【讨论】:

    • 好的,现在知道了。谢谢,作为参考,这是我所做的:在 SetAlerts 方法中,我有一个查询来获取警报(AlertType alert = alertRepository.First(a=>a.ID== alertId); )。我需要分离该警报 (alertRepository.Detach(alert);)。我正在使用通用存储库类 (blog.inetux.net/post/…)
    • 现在,当我保存时,它会创建一个新用户以及一个新警报。我在这里添加了一个不同的问题:stackoverflow.com/questions/6533440/…
    猜你喜欢
    • 1970-01-01
    • 2011-11-01
    • 2011-10-12
    • 1970-01-01
    相关资源
    最近更新 更多