Из Блог Скотта Гу о Многозначные ассоциации :
Ассоциации "многие ко многим" Ассоциация между категорией и элементом является многозначной.связь со многими, как видно из приведенной выше диаграммы классов.Отображение связи «многие ко многим» скрывает промежуточную таблицу связей от приложения, поэтому вы не получите нежелательную сущность в своей доменной модели.Тем не менее, в реальной системе у вас может не быть связи «многие ко многим», поскольку мой опыт показывает, что почти всегда есть другая информация, которая должна быть прикреплена к каждой ссылке между связанными экземплярами (например, дата и время, когда элементбыл добавлен в категорию), и что наилучший способ представления этой информации - через промежуточный класс ассоциации (в EF вы можете отобразить класс ассоциации как объект и отобразить две ассоциации «один ко многим» для каждой стороны.).
В отношении «многие ко многим» таблица соединений (или таблица ссылок, как ее называют некоторые разработчики) имеет два столбца: внешние ключи таблиц Category и Item.Первичный ключ является составной частью обоих столбцов. В EF Code First отображения многих ко многим ассоциациям можно настроить с помощью свободно распространяемого кода API, например:
class ItemConfiguration : EntityTypeConfiguration<Item> {
internal ItemConfiguration()
{
this.HasMany(i => i.Categories)
.WithMany(c => c.Items)
.Map(mc =>
{
mc.MapLeftKey("ItemId");
mc.MapRightKey("CategoryId");
mc.ToTable("ItemCategory");
});
} }
Зарегистрируйте эту конфигурацию в вашем DbContext (вы используетеAPI-интерфейс DbContext, верно?) вот так:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Configurations.Add(new ItemConfiguration());
}
Удачи, надеюсь, это поможет!