【问题标题】:使用可为空的 ID 对同一张表进行 FK
【发布时间】:2022-01-22 02:11:30
【问题描述】:
public class Email
{
    public int Id { get; set; }
    /// ...
    public int? ReplyTo { get; set; }
    public int? ForwardOf { get; set; }
}

我想通过级联删除将ReplyToForwardOf 配置为FK 到Email.Id 属性。

试过这个: e.HasOne(nameof(Email.ReplyTo)).WithMany().OnDelete(DeleteBehavior.Cascade);

但它给出了一个错误

The specified type 'System.Nullable`1[System.Int32]' must be a non-interface reference type to be used as an entity type. 我不希望有Email 类型的导航属性,因为我的代码永远不会使用它们。

【问题讨论】:

  • 您是否尝试过将int? 替换为Email 以便EF 可以自行构建FK?我通常以这种方式做类似的事情:public class Package { public int Id { get; set; } public Package Parent { get; set; } } 这样,如果没有相关项目,数据库中的 FK 值将只是 0。我认为在这种情况下您仍然可以级联删除

标签: entity-framework entity-framework-core ef-core-5.0


【解决方案1】:

这应该允许阴影导航属性:

.HasOne<Email>()
    .WithMany()
    .HasForeignKey(x => x.ReplyTo)
    .OnDelete(DeleteBehaviour.Cascade);

虽然我不确定您是否希望在这种关系上删除级联。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 2020-05-25
    • 2014-01-18
    • 2022-01-20
    • 2016-04-07
    • 1970-01-01
    • 2022-01-27
    相关资源
    最近更新 更多