首先正确定义EF代码中的删除关系

本文关键字:删除 关系 代码 EF 定义 | 更新日期: 2023-09-27 18:17:57

当我从集合中删除实体然后将其持久化时,我得到以下错误。我明白,我需要设置我的关系,以便在关系被删除时删除实体,但是,尽管通过Google和SO进行搜索,我还是无法确切地弄清楚需要做什么。

无法更改关系,因为一个或多个外键属性不可为空。

我有三个表:Role、Permission和RolePermission。我正在尝试从角色中删除RolePermission .

public RoleMap()
{
    HasKey(t => t.Id);
    ToTable("Role");
    Property(t => t.RoleName).HasColumnName("RoleName");
    HasMany(t => t.RolePermissions).WithRequired(t => t.Role).HasForeignKey(t => t.RoleId);
}
public PermissionMap()
{
    HasKey(t => t.Id);
    ToTable("Permission");
    Property(t => t.ApplicationId).HasColumnName("ApplicationId");
    Property(t => t.PermissionName).HasColumnName("PermissionName");
    Property(t => t.IsActive).HasColumnName("IsActive");
    HasRequired(t => t.Application).WithMany(t => t.Permissions).HasForeignKey(t => t.ApplicationId);
}
public RolePermissionMap()
{
    HasKey(t => t.Id);
    ToTable("RolePermission");
    Property(t => t.PermissionId).HasColumnName("PermissionId");
    Property(t => t.RoleId).HasColumnName("RoleId");
    HasRequired(t => t.Permission).WithMany(t => t.RolePermissions).HasForeignKey(t => t.PermissionId);
    HasRequired(t => t.Role).WithMany(t => t.RolePermissions).HasForeignKey(t => t.RoleId);
}

要删除的代码看起来像这样(所有内容都附加到DBContext):

foreach (RolePermission rolePermission in permissionsToRemove)
{
   role.RolePermissions.Remove(rolePermission);
}
//call commit/saveChanges here

我需要设置什么才能使Remove实际引起删除?

首先正确定义EF代码中的删除关系

我认为您根本不需要RolePermission实体,除非您要存储除外键字段之外的更多信息。因此,尝试在Role和Permission之间建立多对多的关系。让我用我自己的代码展示一个例子:

            modelBuilder.Entity<User>()
            .HasMany(u => u.Roles)
            .WithMany(r => r.Users)
            .Map(x => {
                x.ToTable("USER_ROLE_XREF", dbsch);
                x.MapLeftKey("ID_USER");
                x.MapRightKey("ID_ROLE");
            });