我有一个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();
}
}
}
请您参考如下方法:
我认为您应该显式加载相关实体,然后调用 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();
{}
应该这样做。
