首先正确定义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实际引起删除?
我认为您根本不需要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");
});