EF - InvalidOperationException在将项目添加到虚拟ICollection后保存时出错

时间:2017-07-08 09:25:42

标签: c# entity-framework

型号:

public class UserProfile
{
    public int Id { get; set; }

    public virtual ApplicationUser ApplicationUser { get; set; }

    public string Name { get; set; }

    public virtual ICollection<UserProfile> Followers { get; set; }
 }

方法:

public void Follow(int id)
    {
        if (id != AppUser.UserProfile.Id)
        {
            UserProfile profile = db.UserProfile.Find(id);
            if (profile != null)
            {
                if (profile.Followers.Contains(AppUser.UserProfile))
                {
                     profile.Followers.Remove(AppUser.UserProfile);
                }
                else
                {
                    profile.Followers.Add(AppUser.UserProfile);
                }
                db.Entry(profile).State = EntityState.Modified; //error here
                db.SaveChanges();

            }
        }
    }

当用户跟随​​另一个用户时,用户会被添加到关注者ICollection中。如果用户已经关注,则用户将从关注者中删除。

当我尝试更新数据库时,出现此错误:

  

System.InvalidOperationException:'无法定义两个对象之间的关系,因为它们附加到不同的ObjectContext对象。'

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

问题是AppUser.UserProfile不在db上下文中 您可以将AppUser.UserProfile附加到您需要的上下文中,也可以从UserProfile上下文(db)读取Find(AppUser.UserProfile.Id。) 为了以防万一,请不要将AppUser.UserProfile克隆到上下文中,否则EF会添加新的UserProfile