Entity Framework 4.1 Código primero: muchos a muchos con icollection en una sola entidad
-
24-10-2019 - |
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.)
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