C# 更新多对多实体框架。无法从多对多表中删除

C# 更新多对多实体框架。无法从多对多表中删除,c#,.net,entity-framework,linq-to-entities,C#,.net,Entity Framework,Linq To Entities,用户和角色之间存在多对多关系。我可以轻松地将角色添加到多对多表中,但我无法删除它,它不会给我任何错误,但不会删除要删除的角色。我找到什么都试了。这是我的密码 public User Update(User entity) { using (var context = new EnerSysEntities()) { var user = context.Users.Single(u => u.USER_ID == entit

用户和角色之间存在多对多关系。我可以轻松地将角色添加到多对多表中,但我无法删除它,它不会给我任何错误,但不会删除要删除的角色。我找到什么都试了。这是我的密码

public User Update(User entity)
    {
        using (var context = new EnerSysEntities())
        {

            var user = context.Users.Single(u => u.USER_ID == entity.USER_ID);

            //All roles in the data base
            List<Role> roleAlreadyAssigned = GetById(entity.USER_ID).Roles.ToList();

            //Roles to remove
            List<Role> rolesToRemove =
                roleAlreadyAssigned.Where(x => entity.Roles.All(y => y.ROLE_ID != x.ROLE_ID)).ToList();

            //Roles to add
            List<Role> rolesToAdd =
                entity.Roles.Where(x => roleAlreadyAssigned.All(y => y.ROLE_ID != x.ROLE_ID)).ToList();


            foreach (Role roleToDelete in rolesToRemove.ToList())
            {
                // Remove the roles from rolesToRemove
                user.Roles.Remove(roleToDelete);

            }

            //Add the roles which are not in the list of rolesToAdd
            foreach (Role rol in rolesToAdd)
            {
                var newRole = new Role { ROLE_ID = rol.ROLE_ID };
                context.Roles.Attach(newRole);
                user.Roles.Add(newRole);

            }

            context.SaveChanges();
            return entity;
        }
    }
公共用户更新(用户实体)
{
使用(var context=new EnerSysEntities())
{
var user=context.Users.Single(u=>u.user\u ID==entity.user\u ID);
//数据库中的所有角色
List roleAlreadyAssigned=GetById(entity.USER_ID).Roles.ToList();
//要删除的角色
列表角色删除=
其中(x=>entity.Roles.All(y=>y.ROLE\u ID!=x.ROLE\u ID)).ToList();
//要添加的角色
列表角色添加=
其中(x=>roleAlreadyAssigned.All(y=>y.ROLE\u ID!=x.ROLE\u ID)).ToList();
foreach(rolesToRemove.ToList()中的角色roleToDelete)
{
//从RoleStoreRemove中删除角色
user.Roles.Remove(roleToDelete);
}
//添加不在角色列表中的角色添加
foreach(角色添加中的角色rol)
{
var newRole=newRole{Role\u ID=rol.Role\u ID};
context.Roles.Attach(newRole);
user.Roles.Add(newRole);
}
SaveChanges();
返回实体;
}
}

我缺少什么?

若要从实体中删除实体,必须先在实体中加载这些实体

试一试

var user = context.Users.Include(u => u.Roles).Where(u => u.USER_ID == entity.USER_ID).FirstOrDefault;

List<Role> rolesToRemove =
    user.Roles.Where(x => entity.Roles.All(y => y.ROLE_ID != x.ROLE_ID)).ToList();

//Roles to add
List<Role> rolesToAdd =
    entity.Roles.Where(x => user.Roles.All(y => y.ROLE_ID != x.ROLE_ID)).ToList();
var user=context.Users.Include(u=>u.Roles)。其中(u=>u.user\u ID==entity.user\u ID)。FirstOrDefault;
列表角色删除=
user.Roles.Where(x=>entity.Roles.All(y=>y.ROLE\u ID!=x.ROLE\u ID)).ToList();
//要添加的角色
列表角色添加=
其中(x=>user.Roles.All(y=>y.ROLE\u ID!=x.ROLE\u ID)).ToList();

是否在用户角色中使用懒散加载?或者在invoke
var user=context.Users.Single(u=>u.user\u ID==entity.user\u ID)之后为空为什么要再次使用
GetById(entity.user\u ID)
获取用户?尝试从用户对象
var user=context.Users.Single(u=>u.user\u ID==entity.user\u ID)获取角色