Entity Framework 4.1 Codice Primo: molti a molti con ICollection in una sola entità
-
24-10-2019 - |
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)
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