Frage

Ich möchte eine solche Beziehung aufbauen (eine Zone befindet sich in der Nachbarschaft von x anderen Zonen)

public class Zone
{
    public string Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<ZoneNeighourhood> ZoneNeighourhoods { get; set; }
}

public class ZoneNeighbourhood
{
    public virtual Zone Zone1 { get; set; }
    public virtual Zone Zone2 { get; set; }
}

Leider funktioniert dies nicht, denn die von EF generierten FKs sind nicht korrekt ... Wie kann ich eine solche Struktur zum Laufen bringen?

Beispiel mit 3 Zonen: Zone 1, Zone 2, Zone 3

Zone 1 Nachbarn:

Zone 2, Zone 3

Zone 2 Nachbarn:

Zone 1

Zone 3 Nachbarn:

Zone 1

Irgendein Rat?

War es hilfreich?

Lösung

Ihre Zuordnung ist nicht korrekt. Sie erstellen eine Selbstreferenzentität, sodass Sie eine separate Sammlung für eingehende und ausgehende Beziehungen benötigen. Eine einzelne Sammlung reicht nicht aus.

public class Zone 
{
    public string Id { get; set; }
    public string Name { get; set; }
    [InverseProperty("NeighbourOf")]
    public virtual ICollection<Zone> NeighbourTo { get; set; }
    [InverseProperty("NeighbourTo")]
    public virtual ICollection<Zone> NeighbourOf { get; set; }
}

Sie müssen keine Übergangstabelle kartieren, es sei denn, Sie möchten der Beziehung zusätzliche Eigenschaften hinzufügen.

Wenn Sie nur eine einzelne Sammlung wünschen, müssen Sie eine fließende Zuordnung verwenden:

public class Zone 
{
    public string Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Zone> Neighours { get; set; }
}

public class Context : DbContext
{
    public DbSet<Zone> Zones { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Zone>()
                    .HasMany(z => z.Neighbours)
                    .WithMany();
    }
}

Andere Tipps

Dave,

Wie wäre es mit nur:

public class Zone {
    public string Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Zone> Neighours { get; set; }
}

Oder vermisst ich etwas? Müssen Sie die Nachbarschaft aus einem anderen Grund als externes Unternehmen modellieren? Ich frage mich, welches Datenbankschema das Entity-Framework dafür generieren würde ... Ich bin kein Experte, tatsächlich bin ich ein Noob in diesem Bereich. Ich glaube nicht, dass es ein Problem mit selbstverzinslichen Tabellen wie diesem hat ... Ageart nichts, was ich bisher gelesen habe, zeigt es an. Versuchen wir es und finden es heraus ;-)

Prost. Keith.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top