【发布时间】:2021-03-12 09:48:49
【问题描述】:
我有两个实体如下所示:
public class LiftPlan
{
public int Id { get; set; }
public ICollection<PlanConsiderationEntity> PlanConsiderations { get; set; }
}
public class PlanConsideration
{
public int Id { get; set; }
public int PlanId { get; set; }
public LiftPlan LiftPlan { get; set; }
}
关系配置为-
builder
.HasOne(e => e.LiftPlan)
.WithMany(e => e.PlanConsiderations)
.HasForeignKey(e => e.PlanId)
.OnDelete(DeleteBehavior.NoAction);
当我添加子实体时它可以工作 -
LiftPlan.PlanConsiderations.Add(planConsideration)
但是当我尝试删除子实体时
LiftPlan.PlanConsiderations.Remove(planConsideration)
它给了我错误-
实体“LiftPlanEntity”和“PlanConsiderationEntity”与键值“{PlanId: 1}”之间的关联已被切断,但该关系要么标记为“必需”,要么由于外键不可为空而被隐式要求。如果在切断所需关系时应删除依赖/子实体,则将关系设置为使用级联删除。
我尝试使用 -
dbContext.PlanConsiderations.Remove(planConsideration)
它使用dbContext 工作。
我不确定为什么会这样。它应该可以工作,因为我们没有删除父级。如果我们要删除父级,那么这个错误是有道理的。但是对于子删除它不应该发生。
注意:
我知道通过将关系设置为级联删除或将外键设为 null 将起作用,但我不想这样做。
【问题讨论】:
-
在
LiftPlan.PlanConsiderations.Remove(planConsideration)中,LiftPlan和planConsideration从何而来?编辑您的帖子并添加更完整的代码。
标签: sql-server entity-framework-core