Чистое ядро ​​и множественные отношения между субъектами - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть некоторые проблемы, у меня есть Route entites, у которых есть два свойства: Node StartNode и второй Node StartNode.Начальный узел и конечный узел должны иметь связь с маршрутом, но когда я пытаюсь это сделать, я получаю исключение: Cannot create a relationship between 'Node.Route' and 'Route.EndNode', because there already is a relationship between 'Node.Route' and 'Route.StartNode'. Navigation properties can only participate in a single relationship.

Узлы маршрута имеют два объекта Node, представляющих начальную и конечную точки:

public class Route
{
    public Guid DailyRouteId { get; set; }
    public DailyRoute DailyRoute { get; set; }
    public Node StartNode { get; protected set; }
    public Node EndNode { get; protected set; }
    public Guid EndNodeId { get; set; }
    public Guid StartNodeId { get; set; }
}

Узел завлекает:

public class Node
{
    [Key]
    public Guid Id { get; set; }
    public string Address { get; protected set; }
    public double Longitude { get; protected set; }
    public double Latitude { get; protected set; }
    public DateTime UpdatedAt { get; protected set; }

    public Route Route { get; set; }
}

А это модельщик:

modelBuilder.Entity<Route>()
            .HasOne(x => x.StartNode)
            .WithOne(x => x.Route)
            .HasForeignKey<Route>(x => x.StartNodeId)
            .OnDelete(DeleteBehavior.Restrict);

        modelBuilder.Entity<Route>()
            .HasOne(x => x.EndNode)
            .WithOne(x => x.Route)
            .HasForeignKey<Route>(x => x.EndNodeId)
            .OnDelete(DeleteBehavior.Restrict);

1 Ответ

0 голосов
/ 26 сентября 2019

Вам необходимо создать свойство навигации для каждого отношения:

public class Node
{
    [Key]
    public Guid Id { get; set; }
    public string Address { get; protected set; }
    public double Longitude { get; protected set; }
    public double Latitude { get; protected set; }
    public DateTime UpdatedAt { get; protected set; }

    public Route StartRoute { get; set; }
    public Route EndRoute { get; set; }
}

modelBuilder.Entity<Route>()
        .HasOne(x => x.StartNode)
        .WithOne(x => x.StartRoute)
        .HasForeignKey<Route>(x => x.StartNodeId)
        .OnDelete(DeleteBehavior.Restrict);

    modelBuilder.Entity<Route>()
        .HasOne(x => x.EndNode)
        .WithOne(x => x.EndRoute)
        .HasForeignKey<Route>(x => x.EndNodeId)
        .OnDelete(DeleteBehavior.Restrict);
...