7

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

+0

Mi sembra che tu abbia semplicemente bisogno di una classe ProductHierarchy con una proprietà di elenco children. Quali requisiti ritieni non sarebbero stati soddisfatti? –

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.

Problemi correlati