Implementar detalles para una relación N-N

Si en nuestro MVC queremos ver en el detalle de un registro los registros relacionados en otra entidad a través de una relación N-N lo único que tenemos que hacer es cargarlo en el modelo.

Esto lo hacemos a través de Include y ThenInclude que funcionan como si fueran los joins de una consulta.

En el ejemplo tenemos Comics, que tiene una relación 1-N con Categoría y una N-N con autores. Tendremos un Include para incluir Categoría y poder ver su nombre. Para el caso del Autor usamos Include para incluir ComicAutor y después ThenInclude para incluir Autor. Queda así:

var comic = await _context.Comic
.Include(c => c.Categoria)
.Include(c=>c.ComicAutor)
.ThenInclude(ComicAutor=>ComicAutor.Autor)
.FirstOrDefaultAsync(m => m.Id == id);

Cuando pasamos el modelo a la vista tenemos cargados los datos del comic. En el objeto Categoria los datos de la categoría. En la colección de ComicAutor la lista de elementos de ComicAutor y cada uno de estos elementos tendrá el Autor cargado al completo.

Aunque sólo pasamos un modelo (Comic) Estamos pasando información de cuatro entidades de la base de datos: Comic, Categoria, ComicAutor y Autor.

Para acceder a la información basta acceder a las propiedades de esos objetos. Ejemplo:

Nombre de la categoría: model.Categoria.Nombre

Colección de ComicAutor: Model.ComicAutor

Si recorremos este último
@foreach (var c in Model.ComicAutor)
{
<p>@c.Autor.Nombre (@c.Rol)</p>
}

Ejercicio rutas

Refactorizar las rutas del ejercicio para que sean del estilo:

/Diagonal/5

Y que usen sólo una vista aunque tengan un mensaje que muestre lo que estamos viendo (Diagonal, mágico)

Añadir una opción Diamante que nos muestre una tabla como sigue:

1 2 1
2 3 2
1 2 1

 

1 2 2 1
2 3 3 2
2 3 3 2
1 2 2 1
1 2 3 2 1
2 3 4 3 2
3 4 5 4 3
2 3 4 3 2
1 2 3 2 1

 

Ejercicio controlador+vistas

Crear un controlador ‘Tablas’ Que tenga las siguientes acciones:

Diagonal?lado=xx

Nos dibujará una tabla con 1 en la diagonal principal y aumentando de número en las siguientes diagonales. Ejemplo:

1 2 3 4
2 1 2 3
3 2 1 2
4 3 2 1

Aleatorio?lado=xx

Nos dibujará una tabla con valores aleatorios entre 1 y 9. Ejemplo:

1 6 3 5
2 4 2 8
6 2 7 2
2 5 2 9

Magico?lado=??

Nos dibujará una tabla con un cuadrado mágico del lado que nos indiquen. Tenemos que comprobar que el lado sea impar. Ejemplo:

4 9 2
3 5 7
8 1 6

Pista: http://www.elguille.info/NET/dotnet/cuadradoMagico.htm

Ejercicios Regex

Cambiar el programa de amazon para que nos busque urls de imágenes.

Crear un programa que nos busque en el archivo adjunto todos los dnis y matrículas.

testra