0

当我从集合中删除实体然后将其保留回来时,我收到以下错误。我知道我需要设置我的关系以在删除关系时删除实体,但是尽管通过 Google 和 SO 进行搜索,但我无法准确确定需要做什么。

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

我有三个表:角色、权限和角色权限。我正在尝试从角色中删除 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 真正导致删除,我需要设置什么?

4

1 回答 1

0

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

            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");
            });
于 2013-06-12T15:28:00.200 回答