当我从集合中删除实体然后将其保留回来时,我收到以下错误。我知道我需要设置我的关系,以便在删除关系时删除实体,但我无法弄清楚尽管通过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
我需要设置什么才能让删除实际导致删除?
答案 0 :(得分: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");
});