Sto tentando di configurare il mio database usando l'API fluente di Entity Framework 7 per aggiungere una relazione molti-a-molti che si auto-referenzia. La classe in questione ha il seguente aspetto:
public class Definition
{
// Some properties
public virtual ICollection<Definition> AllowedChildDefinitions { get; set; }
}
dove la relazione prevista è che ogni definizione può avere una quantità arbitraria di figli, di qualsiasi istanza. Mi aspetterei una tabella separata con colonne genitore / figlio, in cui ogni genitore può avere più figli e ogni bambino può avere più genitori.
Ci sono esempi di molti a molti ed esempi di tabelle autoreferenziali, ma non riesco a capire come combinare i due.
La soluzione alternativa consiste nel mappare la tabella di join a un'entità. Per favore guarda in questo.
public class Definition
{
public int Id { get; set; }
public ICollection<ChildrenDefinition> ChildrenDefinitions{ get; set; }
}
public class ChildrenDefinition
{
public int DefinitionId { get; set; }
public Definition Definition { get; set; }
public int ChildrenId { get; set; }
public Children Children { get; set; }
}
public class Children
{
public int Id { get; set; }
public ICollection<ChildrenDefinition> ChildrenDefinitions{ get; set; }
}
Assicurati di configurare ChildrenDefinition con una chiave composta:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ChildrenDefinition>().HasKey(x => new { x.DefinitionId, x.ChildrenId });
}
Per navigare, usa un Seleziona:
// Children.Definition
var definitions = Children.ChildrenDefinitions.Select(c => c.Definition);
Spero che questo possa aiutarti!