Desidero implementare la struttura gerarchica dei dati (ad esempio Prodotto -> Prodotto 2 ----> Prodotto3, Prodotto 2 ----> Prodotto4) utilizzando il primo approccio al codice 6 dell'entità framework. Ci sono diversi approcci disponibili ma penso che l'approccio alla tabella di chiusura sia in grado di soddisfare tutti i miei requisiti. Qualcuno può guidarmi come implementare l'approccio alla tavola di chiusura nell'entità quadro 6 in modo efficiente o in qualsiasi altra alternativa?tabelle di chiusura con framework entità 6
7
A
risposta
2
quello che vi serve è una relazione molti-a-molti con un'entità stesso: Per esempio:
public class SelfReferencingEntity
{
public SelfReferencingEntity()
{
RelatedSelfReferencingEntitys = new HashSet<SelfReferencingEntity>();
OtherRelatedSelfReferencingEntitys = new HashSet<SelfReferencingEntity>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int SelfReferencingEntityId { get; set; }
public string Name { get; set; }
public decimal Cost { get; set; }
public virtual ICollection<SelfReferencingEntity> RelatedSelfReferencingEntitys { get; set; }
public virtual ICollection<SelfReferencingEntity> OtherRelatedSelfReferencingEntitys { get; set; }
}
ed è necessario eseguire l'override OnModelCreating metodo DbContext per sostenere i molti-molti auto riferimento simile al seguente:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<SelfReferencingEntity>()
.HasMany(p => p.RelatedSelfReferencingEntitys)
.WithMany(p => p.OtherRelatedSelfReferencingEntitys)
.Map(m =>
{
m.MapLeftKey("SelfReferencingEntityId");
m.MapRightKey("RelatedSelfReferencingEntityId");
m.ToTable("RelatedSelfReferencingEntity", "");
});
}
V'è un bel esempio completo ampiamente descritto nel capitolo 6.3 del libro Entity Framework 6 Recipes che risolve questo problema e rapporto transitivo (rapporto che si estende su più livelli) e il suo codice è disponibile per il download tramite il link che ho citato.
Mi sembra che tu abbia semplicemente bisogno di una classe ProductHierarchy con una proprietà di elenco children. Quali requisiti ritieni non sarebbero stati soddisfatti? –