Я использую EF Code First и у меня проблема в n-n отношениях. Предположим, у нас есть певец, который поет в некоторых жанрах, поэтому нам нужны следующие модели: Artist, Genre и ArtistsGenres. Я определяю модели следующим образом:
Это мой художник Модель:
public class Artist
{
public long Id { get; set; }
public string Name { get; set; }
public ICollection<Genre> Genres { get; set; }
}
И мой жанр Модель:
public class Genre
{
public long Id { get; set; }
public string Title { get; set; }
public ICollection<Artist> Artists { get; set; }
}
И мой контекстный класс:
public class MusicDB : DbContex
{
public DbSet<Artist> Artists { get; set; }
public DbSet<Genre> Genres { get; set; }
public DbSet<ArtistsGenres> ArtistsGenres { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Entity<Artist>()
.HasMany(a => a.Genres)
.WithMany(g => g.Artists)
.Map(model => {
model.ToTable("ArtistsGenres");
model.MapLeftKey("Artist_Id");
model.MapRightKey("Genre_Id");
});
base.OnModelCreating(modelBuilder);
}
}
Но между исполнителями и жанрами нет никакой связи, когда MVC автоматически генерирует представления.
Например, мне нужно изменить жанры исполнителя в режиме редактирования, в представлении «Создать» я могу установить жанры для исполнителя или в индексном представлении я хочу показать жанры для каждого исполнителя. Но нет никакого поколения для жанров по отношению к исполнителю, когда MVC генерирует представления автоматически.
Я знаю, что могу получить доступ как к жанрам, так и к исполнителям с обеих сторон, но мне интересно, чтобы MVC автоматически генерировал представления так, как мы хотим: например, для каждого художника, показывающего связанные жанры.
Как я могу это сделать? Моя модель верна? Верно ли это для любого (n к n) отношения, которое требует ICollection с обеих сторон? Или мне нужны некоторые элементы в переопределении метода OnModelCreating
в классе контекста, например что-то вроде этого:
modelBuilder.Entity<Artist>()
.HasMany(a => a.Genres)
.WithMany(g => g.Artists);
Пожалуйста, помогите мне, я не знаю точную реализацию отношений NtoN.