簡體   English   中英

更新 asp.net 核心 mvc 中的多對多關系

[英]Updating a many-to-many relationship in asp.net core mvc

我有兩個模型

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 model。 當我想更新用戶的權限時,我在 controller 中執行此操作

    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'

我該如何解決?

盡量不要清除新集中存在的用戶權限。

  1. 檢查以前的權限並刪除不再存在的權限
 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);
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM