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

时间:2014-11-20 16:16:00

标签: c# asp.net entity-framework many-to-many

我有一个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表中删除一些记录:

enter image description here

我尝试了这个解决方案,但它无法正常工作:

    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();
            }
        }
    }

enter image description here

1 个答案:

答案 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();
{}

这应该这样做。