Pregunta

Dadas estas clases, utilizando primero el código EF 4.1, esto (por convención) dejará una relación de muchos a muchos entre la página y la etiqueta:

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; }
}

Ya que tengo un montón de otras clases, que implementan el ITaggable Tendría que agregar todas estas colecciones a Tag:

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

Si omito estas propiedades Tag EF genera una relación de 1 a muchos. ¿Hay alguna forma de dejar de lado el ICollection<T> en Tag ¿Y obtener una relación de muchos a muchos de todos modos?

(Observación: ICollection<ITaggable> en Tag no funciona.)

¿Fue útil?

Solución

Tienes que usar el mapeo fluido:

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();
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top