Uso EF Code First y tengo un problema en la relación nn, supongo que tenemos un cantante que canta en algunos géneros, entonces necesitamos estos modelos: Artist, Genre, y ArtistsGenres, defino Models como los siguientes:¿Cómo funciona la relación modelo n - n en el código EF Las primeras vistas generadas automáticamente funcionan correctamente?
This es mi artista Modelo:
public class Artist
{
public long Id { get; set; }
public string Name { get; set; }
public ICollection<Genre> Genres { get; set; }
}
Y mi Modelo Género:
public class Genre
{
public long Id { get; set; }
public string Title { get; set; }
public ICollection<Artist> Artists { get; set; }
}
Y mi clase de contexto:
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);
}
}
Pero no hay ninguna relación entre Artistas y Géneros cuando MVC genera vistas automáticamente.
Por ejemplo, necesito cambiar géneros de un artista en la vista de edición, en la vista Crear puedo establecer géneros para un artista, o en la vista de índice quiero mostrar géneros para cada artista. Pero no hay ninguna generación para Géneros en relación con Artist cuando MVC genera vistas automáticamente.
Sé que puedo acceder tanto a géneros como a artistas de ambos lados, pero soy interesante en cuanto a que MVC genere automáticamente vistas como queramos: por ejemplo, para cada artista mostrar géneros relacionados.
¿Cómo puedo hacer esto? ¿Mi modelo es correcto? ¿Es esto cierto para cualquier relación (n a n) que necesite ICollection en ambos lados? ¿O es que necesito algunos elementos en primordial de OnModelCreating
método en la clase de contexto, por ejemplo, algo como esto:
modelBuilder.Entity<Artist>()
.HasMany(a => a.Genres)
.WithMany(g => g.Artists);
Por favor, ayúdame, no sé la aplicación exacta de la relación Nton.
su derecha, pero esta solución simplemente construir una tabla ArtistsGenres de forma automática y todos los de mi acero problemas sin resolver, no hay relación entre el género y artista en cualquier vista. – Saeid
Edito mi pregunta con su respuesta – Saeid
Si quiere decir que 'MVC' generará' View's con la asociación de modelos automáticamente, en la medida en que sé, ¡no puede! y deberías crear tus propias plantillas 'T4'. ¿Te refieres a esto? Si es así, debe cambiar su Q; si no, explique su propósito más. Saludos –