Entity Framework 4.1 код сначала: многие ко многим с Icollection только на одном объекте
-
24-10-2019 - |
Вопрос
Учитывая эти классы, сначала используя код 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();
}
}
Не связан с StackOverflow