elbstreferenzierung von Many-to-Many-Beziehung

Ich habe einTicket Entität

    public class Ticket
    { 
        public int Id { get; set; }
        public string Title { get; set; }

        public virtual ICollection<Relation> RelatedTickets { get; set; }
    }

Ich möchte viele-zu-viele-Selbstbeziehungen in Entity Framework Core einrichten, also habe ich zwei Eins-zu-viele-Beziehungen erstellt:

public class Relation
{
    [Required, ForeignKey("TicketFrom")]
    public int FromId { get; set; }

    [Required, ForeignKey("TicketTo")]
    public int ToId { get; set; }

    public virtual Ticket TicketFrom { get; set; }
    public virtual Ticket TicketTo { get; set; }
}

Ich habe versucht, die Beziehung mithilfe einer flüssigen API zu erstellen:

        builder.Entity<Relation>()
               .HasKey(uc => new { uc.FromId, uc.ToId });
        builder.Entity<Relation>()
           .HasOne(c => c.TicketFrom)
           .WithMany(p => p.RelatedTickets)
           .HasForeignKey(pc => pc.FromId);
        builder.Entity<Relation>()
           .HasOne(c => c.TicketTo)
           .WithMany(p => p.RelatedTickets)
           .HasForeignKey(pc => pc.ToId);

Aber im Ergebnis habe ich einen Fehler:

Kann keine Beziehung zwischen 'Ticket.RelatedTickets' und 'Relation.TicketTo' erstellen, da bereits eine Beziehung zwischen 'Ticket.RelatedTickets' und 'Relation.TicketForm' besteht. Navigationseigenschaften können nur an einer einzelnen Beziehung teilnehmen.

Die mögliche Lösung besteht darin, die übergeordnete Beziehung direkt zu @ hinzuzufügeTicketEntity:

public class Ticket
{ 
    public int Id { get; set; }

    [Required, ForeignKey("ParentRelation")]
    public Nullable<int> ParentRelationId { get; set; }

    public virtual Ticket ParentRelation {get;set;}

    public virtual ICollection<Ticket> RelatedTickets { get; set; }
    ...
}

Mit fließendem API wie folgt:

modelBuilder.Entity<Ticket> =>
{
    entity
        .HasMany(e => e.RelatedTickets)
        .WithOne(e => e.ParentRelation) 
        .HasForeignKey(e => e.ParentRelationId );
});

Aber es sieht 'schmutzig' aus, eine Elternbeziehung wie diese zu speichern.
Was ist der richtige Ansatz?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage