Я использую EF Code First и у меня проблема в n-n отношениях, предположим, что у нас есть певец, который поет в некоторых жанрах, поэтому нам нужны эти модели: Artist, Genre и ArtistsGenres, я определяю модели следующим образом:
Это моя модель Artist:
public class Artist
{
public long Id { get; set; }
public string Name { get; set; }
public ICollection<Genre> Genres { get; set; }
}
И моя модель Genre:
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);
}
}
Но нет никаких отношений между Artists и Genres, когда MVC генерирует представления автоматически.
Например, мне нужно изменить жанры артиста в представлении редактирования, в представлении создания я могу установить жанры для артиста, или в представлении индекса я хочу показать жанры для каждого артиста. Но при автоматической генерации представлений в MVC нет генерации для жанров по отношению к артисту.
Я знаю, что могу получить доступ к жанрам и исполнителям с обеих сторон, но мне интересно, чтобы MVC автоматически генерировал представления так, как мы хотим: например: для каждого исполнителя показывать связанные с ним жанры.
Как я могу это сделать? Правильна ли моя модель? Это верно для любого отношения (n к n), которое нуждается в ICollection на обеих сторонах? Или мне нужны какие-то элементы в переопределении метода OnModelCreating
в классе контекста, например, что-то вроде этого:
modelBuilder.Entity<Artist>()
.HasMany(a => a.Genres)
.WithMany(g => g.Artists);
Пожалуйста, помогите мне, я не знаю точной реализации отношения NtoN.