Entity Framework 4.1 код сначала: многие ко многим с Icollection только на одном объекте

StackOverflow https://stackoverflow.com/questions/5804540

Вопрос

Учитывая эти классы, сначала используя код EF 4.1, это (согласно) оставит отношение к многим ко многим между страницей и тегом:

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 не работает.)

Это было полезно?

Решение

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

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();
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top