Entity Framework 4.1 - Codice Primo: molti-a-molti
-
22-10-2019 - |
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?
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.