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();
是否在用户角色中使用懒散加载?或者在invokevar 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)获取角色是的,我会的