我有一个Role
和一个Permision
表,具有多对多关系。我想从结果表(RolePermission
)中删除一些行,这些行在我的项目中不作为类存在:
public class RoleDto
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<PermissionDto> Permissions { get; set; }
}
public partial class Permission
{
public Permission()
{
this.Roles = new HashSet<Role>();
}
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Role> Roles { get; set; }
}
我想从我的数据库中的RolePermission
表中删除一些记录:
我尝试了这个解决方案,但它无法正常工作:
public void setRolePermissions(int role, List<int> permissions)
{
if (permissions.Count > 0 && role != 0)
{
var model = _context.Roles.FirstOrDefault(x => x.Id == role);
foreach (int item in permissions)
{
Permission permission = (Permission)getPermissionsByid(item);
model.Permissions.Remove(permission);
_context.SaveChanges();
}
}
}
答案 0 :(得分:3)
我认为您应该显式加载相关实体,然后调用Remove方法。
public void setRolePermissions(int role, List<int> permissions)
{
var roleToUpdate = _context.Roles.Find(role);
_context.Entry(roleToUpdate).Collection("Permissions").Load(); // load explicitly here
foreach (int item in permissions)
{
Permission permission = (Permission)getPermissionsByid(item);
roleToUpdate.Permissions.Remove(permission);
}
_context.SaveChanges();
{}
这应该这样做。