Entity framework 使用分离的对象和复合关系表

Entity framework 使用分离的对象和复合关系表,entity-framework,entity-framework-6,Entity Framework,Entity Framework 6,我有一个用户实体,它是一个角色列表。角色列表来自使用组合键UserId和RoleId的UserRole表 从管理客户端更新用户,这意味着其已分离。 我的代码看起来像 public void UpdateUser(User user) { db.Entry(user).State = EntityState.Modified; if (string.IsNullOrEmpty(user.Password)) db.Entry(user).Property(x =&

我有一个用户实体,它是一个角色列表。角色列表来自使用组合键UserId和RoleId的UserRole表

从管理客户端更新用户,这意味着其已分离。 我的代码看起来像

public void UpdateUser(User user)
{
    db.Entry(user).State = EntityState.Modified;

    if (string.IsNullOrEmpty(user.Password))
        db.Entry(user).Property(x => x.Password).IsModified = false;
    else
    {
        HashPassword(user);
    }

    db.SaveChanges();
}
如何让EF知道对关系表所做的更改

编辑: 使用具有自己主键的关系,您可以迭代集合并执行
db.Entry(role).State=role.Id==0?添加:EntityState.Modified

这不适用于组合键关系,如“我的角色>用户关系”。我怎样才能解决这个问题

edit2: 试过这个,没用

var roles = user.Roles.Select(r => db.Roles.Find(r.Id)).ToList();
user.Roles.Clear();
roles.ForEach(user.Roles.Add);

我假设编辑后,
user
还包含其
角色
?传入的分离用户具有来自客户端的正确角色,但它不会通过db.Entry(user.State=EntityState.Modified更新;不,这只影响标量属性。您必须自己同步角色。我只需在
用户
中替换
角色
。这将删除旧的连接记录并创建新的连接记录。