Entity framework core EF核心:一对一';卫星';表需要自己的键吗?

Entity framework core EF核心:一对一';卫星';表需要自己的键吗?,entity-framework-core,Entity Framework Core,以下是我的设想: public class Main { public Guid Id { get; set; } public string Something { get; set; } public MoreDetail OptionalDetail { get; set; } } public class MoreDetail { public Guid MainId { get; set; } public Main Main { get; s

以下是我的设想:

public class Main
{
    public Guid Id { get; set; }
    public string Something { get; set; }
    public MoreDetail OptionalDetail { get; set; }
}

public class MoreDetail
{
    public Guid MainId { get; set; }
    public Main Main { get; set; }
    public string MoreInfo { get; set; }
}

// model building code:

mainBuilder.HasOne(m => m.OptionalDetail).WithOne(d => d.Main).IsRequired(false);
预期:

  • moredeail
    Main
  • 主键是
    MainId
    ;它不需要自己的ID
实际:

实体类型“Main”需要定义一个键。

尝试:

  • 添加
    moreDetailBuilder.HasKey(d=>d.MainId)
    。产生相同的错误
  • .HasForeignKey(d=>d.MainId)
    添加到
    Main
    modelbuilder代码中。给定
    实体类型“moredeail”上的外键{'MainId'}不能标记为可选,因为它不包含任何可为null类型的属性。可以根据需要标记任何外键,但只有至少具有一个可为null类型属性且不属于主键的外键才能标记为可选。
  • 改为使用
    .IsRequired(true)
    。密钥设置和插入记录工作正常。。但在查询时,EF Core生成一个
    内部联接
    ,这意味着如果没有记录,则不会返回任何内容:(
官方文档示例显示了子/附属表有自己的主键。这似乎不必要;数据完全由其外键标识,不是吗