可能在一个表上具有多个一对一关系,而在子表上具有一个导航属性?

时间:2018-10-26 20:04:58

标签: c# sql-server entity-framework-core

我有Inspection,每个Inspection可以有一个InspectorInfo和一个CoInspectorInfo。这些是可选的,因此两个外键都可以为空。 InspectorInfo记录不会重复使用,将为每个Inspection插入新记录。我正在尝试像这样构建它:

public class Inspection
{
    public Guid InspectionId { get; set; }
    public Guid? InspectorInfoId { get; set; }
    public Guid? CoInspectorInfoId { get; set; }

    [ForeignKey(nameof(InspectorInfoId))]
    public virtual InspectorInfo InspectorInfo { get; set; }
    [ForeignKey(nameof(CoInspectorInfoId))]
    public virtual InspectorInfo CoInspectorInfo { get; set; }
}

public class InspectorInfo
{
    public Guid InspectorInfoId { get; set; }
    public string Name { get; set; }
    public DateTime ApprovedOn { get; set; }

    public virtual Inspection Inspection { get; set; }
}

但是当我添加迁移时,出现此错误:

  

无法确定类型为'Inspection'的导航属性'InspectorInfo.Inspection'表示的关系。

我尝试将其添加到我的DbContext

modelBuilder.Entity<InspectorInfo>(entity =>
{
    entity.HasOne(d => d.Inspection)
        .WithOne(p => p.InspectorInfo)
        .HasForeignKey<Inspection>(d => d.InspectorInfoId);

    entity.HasOne(d => d.Inspection)
        .WithOne(p => p.CoInspectorInfo)
        .HasForeignKey<Inspection>(d => d.CoInspectorInfoId);
});

但是后来我得到了这个错误:

  

无法在“ InspectorInfo.Inspection”和“ Inspection.CoInspectorInfo”之间创建关系,因为“ InspectorInfo.Inspection”和“ Inspection.InspectorInfo”之间已经存在关系。导航属性只能参与单个关系。

这很有意义,因为我尝试将多个.HasOne关系添加到单个InspectorInfo实体。但是我不知道如何定义它,因为Inspection将有两个单独的InspectorInfo记录,每个记录都适用于同一Inspection

更新:

看起来(现在更清楚),它无法与Inspection类上的单个Navigation属性一起返回到InspectorInfo,因为它不知道使用哪个FK。

0 个答案:

没有答案