问题描述
我遇到了熟悉的多级联路径问题:
父配置:
builder.HasMany(p => p.Persons)
.WithOne(p => p.Parent)
.HasForeignKey("ParentId")
.OnDelete(DeleteBehavior.Cascade);
builder.HasMany(p => p.Places)
.WithOne(p => p.Parent)
.HasForeignKey("ParentId")
.OnDelete(DeleteBehavior.Cascade);
放置配置:
// nothing Special
人员配置:
builder.HasOne(p => p.Place)
.WithMany()
.HasForeignKey("PlaceId")
.Isrequired(true)
.OnDelete(DeleteBehavior.NoAction);
- 如果我有一个人,那么它必须与一个地方相关。
- 我知道我需要在 Person > Place 关系上使用 DeleteBehavior.NoAction 因为父级已经在处理 Place 和 Person 记录上的 DeleteBehavIoUr.Cascade,所以从 Place 到 Person 的另一个级联将导致多个级联路径.
- 我需要添加 Isrequired(true) 因为“PlaceId”是 EF 添加的影子属性(默认情况下,影子属性可以为空),而不是 Person 类上的声明属性。 (我不希望域模型需要实体本身的 PlaceId)。
问题在于,尽管指定了 NoAction 删除行为,但看起来“Isrequired(true)”似乎覆盖了这一点并强制执行:
onDelete: referentialAction.Cascade
关于迁移。如果我使用限制,结果相同。
我知道,如果 Person 引用的 Place 被删除,使用 NoAction 可能会导致 FK 违规,但我可以在我的 EF Graph 中进行管理。我所希望的似乎是完全合理的。
我做错了吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)