EF Core - Ссылочный родительский родитель с ForeignKey - PullRequest
1 голос
/ 08 апреля 2019

У меня есть следующие модели данных:

Диаграмма:

public class Diagram
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public long Id { get; set; }
        [ForeignKey("QuizId")]
        public Quiz Quiz { get; set; }
        public long QuizId { get; set; }
        public string Question { get; set; }
        public List<DiagramServer> Servers { get; set; }
        public List<DiagramServerEvent> AvaliableEvents { get; set; }
    }

DiagramServer: (дочерний элемент диаграммы)

public class DiagramServer
{
    public long Id { get; set; }
    [ForeignKey("DiagramId")]
    public Diagram Diagram { get; set; }
    public long DiagramId { get; set; }
    public string Name { get; set; }
    public List<DiagramServerEvent> Events { get; set; }
}

DiagramServerEvent: (потомок DiagramServer и DiagramServer)

public class DiagramServerEvent
{
    public long Id { get; set; }
    public string Payload { get; set; }
    public float XCoordinate { get; set; } 
    public long EventId { get; set; }
    [ForeignKey("DiagramId")]
    public Diagram Diagram { get; set; }
    public long? DiagramId { get; set; }
    [ForeignKey("DiagramServerId")]
    public DiagramServer Server { get; set; }
    public long? DiagramServerId { get; set; }
}

Я бы хотел, чтобы DiagramId в DiagramServerEvent ссылался на корневую диаграмму. Похоже, это проблема, потому что некоторые события являются потомками DiagramSever, который затем является потомком Diagram. Есть ли способ вручную настроить это? Или это плохая модель?

Я также использую соединитель Pomelo для EF Core для поддержки MySQL.

Вот обзор записей DiagramServerEvent в базе данных . Первые три записи являются дочерними объектами объекта Diagram, остальные - дочерними объектами различных объектов DiagramServer. [ForeignKey("DiagramId") ссылка из DiagramServerEvent, похоже, не работает, когда Diagram не является ближайшим родителем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...