【问题标题】:Updating a many-to-many relationship in asp.net core mvc在 asp.net core mvc 中更新多对多关系
【发布时间】:2022-01-14 06:56:48
【问题描述】:

我有两个模型

public class User
{
    public User()
    {
        this.Permissions = new HashSet<Permission>();
    }

    public string UserName { get; set; }

    public ICollection<Permission> Permissions { get; set; }
 }

与

public class Permission
{
    public Permission()
    {
        this.Users = new HashSet<User>();
    }

    [Required]
    public string Name { get; set; }

    public ICollection<User> Users { get; set; }
}

连接表是自动创建的,我看不到 ef 模型。当我想更新用户的权限时,我在控制器中这样做

    user.Permissions.Clear();
    foreach (var permissionID in userDTO.Permissions)
    {
       var permission = _context.Permissions.Find(permissionID.PermissionID);
       if (permission != null)
       {
          user.Permissions.Add(permission);
       }
     }
     await _context.SaveChangesAsync();

但是,当我尝试清除用户的现有权限并为用户插入新权限时,我收到一个错误:Duplicate entry '1-1' for key 'permissionuser.PRIMARY'

我该如何解决这个问题?

【问题讨论】:

  • 当我尝试清除现有权限时 -- 请说明如何。

标签: c# entity-framework asp.net-core asp.net-web-api


【解决方案1】:

尽量不要清除新集中存在的用户权限。

  1. 检查以前的权限并删除不再存在的权限
user.Permissions= user.Permissions.ToList();

 for (var i=0; i< user.Permissions.Count; i++)
 {
    var exist= userDTO.Permissions.Any(i=> i.PermissionID=user.Permissions[i].PermissionID);
 if (!exist) user.Permissions.RemoveAt(i);
}
  1. 现在添加新权限
    foreach (var permission in userDTO.Permissions)
    {
        var existedPermission= user.Permissions.FirstOrDefault(i=> i.PermissionId=permissionID.PermissionID;
        if (existedPermission== null)
        {
             var newPermission = _context.Permissions.Find(permission.PermissionID);
             if (newPermission != null) user.Permissions.Add(permission);
        }
    }

【讨论】:

  • 我怎样才能在这里删除权限所以如果之前的权限是 [1,2'3] 而新的权限是 [2,3] 这将如何工作?
  • @Aishwarya 是的,你是对的,我知道,现在正在准备更新的 unswer。
  • @Aishwarya 我更新了我的答案
  • 行 user.Permissions[i].PermissionID : 有错误,无法将 [] 索引应用于 ICollection 类型的表达式
  • 还是同样的错误。代码未编译
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多