Как правильно работает модель n--n отношений в EF Code First для автоматически генерируемых представлений?

Я использую 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.

10
задан Saeid 22 November 2011 в 14:53
поделиться