Domanda

Voglio costruire un rapporto come questo (una Zona si trova nel quartiere di x altre zone)

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; }
}

Purtroppo questo non funziona, perché i FKS generati da EF non sono corretti ... Come posso ottenere una struttura come questa al lavoro?

Esempio con 3 zone: Zona 1, Zona 2, Zona 3

Zona 1 Neighours:

Zona 2, Zona 3

Zona 2 Vicini:

Zona 1

Zona 3 Vicini:

Zone1

Qualche consiglio?

È stato utile?

Soluzione

Il tuo mappatura non è corretta. Si sta creando un'entità di riferimento di auto quindi è necessario raccolta differenziata per le relazioni in entrata e in uscita. Single Collection non è sufficiente.

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; }
}

Non è necessario mappare tabella di collegamento a meno che non si desidera anche aggiungere alcune proprietà aggiuntive per il rapporto.

Se desideri solo Single Collection è necessario utilizzare la mappatura fluente:

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();
    }
}

Altri suggerimenti

Dave,

Come circa appena:

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

O mi manca qualcosa? Avete bisogno di modellare il quartiere come un'entità esterna per qualche altro motivo? Mi chiedo cosa del database-schema Entity Framework-genererebbe per questo ... io non sono un esperto, in realtà io sono un noob in questo settore. Non credo che ha un problema con le tabelle di auto-referncing come questo ... aleast niente che ho letto finora lo indica. Proviamo e scoprire; -)

Saluti. Keith.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top