Question

Compte tenu de ces classes, à l'aide EF 4.1 Code du premier, cela (par convention) l'autorisation d'un grand nombre à plusieurs rapports entre la page et 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; }
}

Depuis que j'ai un tas d'autres classes, qui mettent en œuvre le ITaggable je devrais ajouter toutes ces collections à Tag:

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

Si je quitte ces propriétés sur Tag EF génère un 1 à-plusieurs. Est-il possible de laisser le ICollection<T> sur Tag et obtenir un grand nombre à-plusieurs de toute façon?

(Remarque:. ICollection<ITaggable> sur Tag ne fonctionne pas)

Était-ce utile?

La solution

Vous devez utiliser le mappage couramment:

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();
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top