0

コレクションからエンティティを削除してから永続化すると、次のエラーが発生します。関係が削除されたときにエンティティを削除するように関係を設定する必要があることは理解していますが、Google や SO で検索しても、何をする必要があるのか​​正確にわかりません。

1 つ以上の外部キー プロパティが null 非許容であるため、リレーションシップを変更できませんでした。

Role、Permission、および RolePermission の 3 つのテーブルがあります。RolePermission を Role から削除しようとしています。

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 エンティティはまったく必要ないと思います。したがって、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");
            });
于 2013-06-12T15:28:00.200 に答える