Skip to main content
 首页 » 编程设计

c#之使用 Entity Framework 和 ASP.NET 从(多对多)结果表中删除记录

2024年08月12日44mq0036

我有一个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(); 
{} 

应该这样做。