Entity Framework 4.1 Code First: многие ко многим с ICollection только на одном объекте - PullRequest
1 голос
/ 27 апреля 2011

Учитывая эти классы, используя EF 4.1 Code First, это (по соглашению) оставит отношение «многие ко многим» между Page и 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; }
}

Так как у меня есть куча других классов, которые реализуют ITaggable Я должен был бы добавить все эти коллекции в Tag:

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

Если я опущу эти свойства в Tag EF генерирует отношение 1-ко-многим.Есть ли способ пропустить ICollection<T> на Tag и получить отношение «многие ко многим»?

(Примечание: ICollection<ITaggable> на Tag не работает.)

1 Ответ

5 голосов
/ 27 апреля 2011

Вы должны использовать беглое отображение:

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();
    }
}
...