Domanda

Alla luce di queste classi, utilizzando EF 4.1 Codice In primo luogo, questa volontà (per convenzione) il permesso di una relazione molti-a-molti relazione fra le pagine e tag:

public interface ITaggable
{
  ICollection<Tag> { get; set; }
}

public class Page : ITaggable
{
  public virtual ICollection<Tag> { get; set; }
}

public class Tag
{
  public virtual ICollection<Page> { get; set; }
}

Dal momento che ho un sacco di altre classi, che implementano il ITaggable avrei dovuto aggiungere tutti questi insiemi di Tag:

public class Tag
{
  public virtual ICollection<Page> { get; set; }
  public virtual ICollection<Post> { get; set; }
  public virtual ICollection<Event> { get; set; }
  ...
}

Se lascio fuori queste proprietà sul Tag EF genera un rapporto 1-a-molti. C'è un modo per lasciare fuori il ICollection<T> su Tag e ottenere una relazione molti-a-molti relazione comunque?

(Nota:. ICollection<ITaggable> su Tag non funziona)

È stato utile?

Soluzione

È necessario utilizzare la mappatura fluente:

public interface ITaggable
{
  ICollection<Tag> { get; set; }
}

public class Page : ITaggable
{
    ...
    public virtual ICollection<Tag> Tags { get; set; }
}

public class Tag
{
    ...
}

public class Context : DbContext
{
    public DbSet<Tag> Tags { get; set; }
    public DbSet<Page> Pages { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Page>()
                    .HasMany(p => p.Tags)
                    .WithMany();
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top