Я использую 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 автоматически генерирует представления.
Например, мне нужно изменить жанры исполнителя в режиме редактирования, в "Создать представление" я могу установить "Жанры для исполнителя" или "Индексный вид". Я хочу показывать жанры для каждого исполнителя. Но нет никакого поколения для жанров в отношении Artist, когда MVC автоматически генерирует представления.
Я знаю, что я могу получить доступ как к жанрам, так и к художникам с обеих сторон, но мне интересно, что MVC автоматически генерирует представления по мере того, как мы хотим: например: для каждого исполнителя показаны связанные жанры.
Как я могу это сделать? Является ли моя модель правильной? Это верно для любого отношения (от n до n), которое требует ICollection с обеих сторон? Или мне нужны некоторые элементы в переопределении метода OnModelCreating
в контексте класса, например, примерно так:
modelBuilder.Entity<Artist>()
.HasMany(a => a.Genres)
.WithMany(g => g.Artists);
Пожалуйста, помогите мне, я не знаю точную реализацию отношений NtoN.