Можно ли иметь несколько однозначных отношений в таблице с одним свойством навигации в дочерней таблице? - PullRequest
0 голосов
/ 26 октября 2018

У меня есть Inspection, каждый Inspection может иметь InspectorInfo и CoInspectorInfo. Они являются необязательными, поэтому оба внешних ключа могут иметь значение NULL. Записи 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; }
}

Но когда я добавляю Миграцию, я получаю эту ошибку:

Невозможно определить отношение, представленное свойством навигации 'InspectorInfo.Inspection' типа '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.

Обновление:

Похоже, и теперь стало понятнее, что он просто не будет работать с одним свойством Navigation обратно в Inspection класса InspectorInfo, поскольку он не будет знать, какой FK использовать.

...