如何解决EF Fluent API - Shadow 属性、IsRequired(True) 和 DeleteBehavior.NoAction / Restrict 的组合
我遇到了熟悉的多级联路径问题:
父配置:
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 举报,一经查实,本站将立刻删除。