微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EF Fluent API - Shadow 属性、IsRequired(True) 和 DeleteBehavior.NoAction / Restrict 的组合

如何解决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 举报,一经查实,本站将立刻删除。