gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:47:43 26 4
gpt4 key购买 nike

我有一个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

最佳答案

我认为您应该显式加载相关实体,然后调用 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();
{}

应该这样做。

关于c# - 使用 Entity Framework 和 ASP.NET 从(多对多)结果表中删除记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27044359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com