Entity Framework一对多关系或一对一关系删除子对象的方法
public void UpdatePermIds(long roleId, long[] permIds)
{
//角色是否存在
Role role = RoleDal.GetById(roleId);
if (role == null)
{
throw new ArgumentException("roleId 不存在" + roleId);
}
role.RolePermissions.Clear();
//权限是否存在
var perms = PermissionDal.GetAll().Where(p => permIds.Contains(p.Id)).ToArray();
foreach (var perm in perms)
{
RolePermission rp = new RolePermission();
rp.RoleId = role.Id;
rp.PermissionId = perm.Id;
rp.IsDeleted = false;
rp.CreateDateTime = DateTime.Now;
CurrentDal.Add(rp);
}
DbSession.SaveChanges();
}
操作失败: 无法更改关系,因为一个或多个外键属性不可以为 null。对关系作出更改后,会将相关的外键属性设置为 null 值。如果外键不支持 null 值,则必须定义新的关系,必须向外键属性分配另一个非 null 值,或必须删除无关的对象。
参考资料:Entity Framework一对多关系或一对一关系删除子对象的方法