Ejercicio Colección de cómics

Vamos a crear una aplicación para hacer un catálogo de una colección de comics. Las entidades son las siguientes:

Categorias: Nombre y descripción
Autores: Nombre, nacionalidad y año de nacimiento
Comics: Título, descripción, fecha y número de páginas

Una categoría puede tener varios cómics pero un cómic sólo pertenece a una categoría
Un autor lo puede ser de varios comics y viceversa. Los autores pueden tener diferentes roles para cada cómic (guionista, dibujante, entintador,…)

Tenemos que hacer:

1) Modelo ER.
2) Crear una aplicación de consola que implemente (Code First) este modelo.
3) En esa misma aplicación poder hacer un mantenimiento CRUD de las tres tablas. Incluyendo asignar autores a comics. Las asignaciones se harán por el id.

Ejemplo. El programa nos mostrará lo siguiente:

1) Añadir categoría
2) Ver categorías
3) Modificar categoría
4) Borrar categoría

Si pulsamos 1:

Introduzca el nombre de la categoría:
Introduzca la descripción:
Categoría creada con id:

Si pulsamos el 2:

Id Nombre Descripción
1 Manga Comic japonés
2 Novela gráfica

Si ponemos el 3:

Introduzca el id a modificar:
Introduzca nuevo nombre (intro para no modificar):
Introduzca nueva descripción (intro para no modificar):

Si ponemos el 4:

introduzca el id a eliminar:
Borrará la categoría XXX ¿Está seguro?

4) Modificar las asignaciones para incluir también búsqueda por nombre.
5) Crear una opción de estadísticas que nos permita ver:
a) El número de cómics por categoría
b) el número de cómics por autor
c) Los 5 cómics con mayor número de páginas.
d) el número de autores por nacionalidad.

 

Añadir la entidad Editorial

Tiene las propiedades nombre y país

Un comic es de una editorial y una editorial puede tener varios comics.

Añadir el CRUD de la editorial y los cambios que sean necesarios en comic para tener en cuenta la editorial.

Anotaciones

En nuestra entidad profesor vamos a poner el nombre requerido, con una longitud mínima de 5 y máxima de 150.

Vamos a añadir un campo en curso Horas que son los créditos * 5 y no lo vamos a mapear con la base de datos

Vamos a añadir una entidad ‘Tarjeta’ con los campos IdTarjeta y Codigo (String) el codigo tiene un tamaño entre 10 y 20 y es requerido.

DBFirst

install-package Microsoft.EntityFrameworkCore
install-package Microsoft.EntityFrameworkCore.SqlServer
install-package Microsoft.EntityFrameworkCore.tools

Scaffold-DbContext “Server=.\SQLExpress;Database=pasiona;Trusted_Connection=True;” Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

DataAnnotations

System.ComponentModel.DataAnnotations.Schema attributes

Attribute Description
Table The database table and/or schema that a class is mapped to.
Column The database column that a property is mapped to.
ForeignKey Specifies the property is used as a foreign key in a relationship.
DatabaseGenerated Specifies how the database generates values for a property.
NotMapped Applied to properties or classes that are to be excluded from database mapping.
InverseProperty Specifies the inverse of a navigation property
ComplexType Denotes that the class is a complex type. *Not currently implemented in EF Core.

System.ComponentModel.Annotations attributes

Attribute Description
Key Identifies one or more properties as a Key
Timestamp Specifies the data type of the database column as rowversion
ConcurrencyCheck Specifies that the property is included in concurrency checks
Required Specifies that the property’s value is required
MaxLength Sets the maximum allowed length of the property value (string or array)
StringLength Sets the maximum allowed length of the property value (string or array)

Algunos enlaces:

Validando sin parar. Uso de DataAnnotations

https://www.learnentityframeworkcore.com/configuration/data-annotation-attributes

https://www.c-sharpcorner.com/article/model-validation-using-data-annotations-in-asp-net-mvc/

Nueva entidad a nuestro proyecto

Vamos a añadir a nuestro proyecto una entidad Profesor con su id, nombre y correo.

Un curso tiene un profesor pero un profesor tiene varios cursos.

Añadir un profesor y a ver qué pasa con los datos que ya tenemos.

¡Suerte!

Alumno y Curso

En nuestro proyecto de Alumnos vamos a añadir la entidad Curso, con su Id y un campo nombre (String) y Creditos (int)

Un alumno puede pertenecer a un solo curso y un curso tendrá varios alumnos.

Añadiremos POR CÓDIGO el curso ‘DAW 1’ de 200 créditos. Y a ese curso añadimos los alumnos ‘Eva’, ‘Ana’ y ‘Juan’ con los campos DNI y mail que queramos.

Proveedores conexión

https://docs.microsoft.com/es-es/ef/core/providers/?tabs=dotnet-core-cli

Microsoft.EntityFrameworkCore.Sqlite De SQLite 3.7 en adelante Proyecto EF Core (Microsoft) 6.0 Documentación
Microsoft.EntityFrameworkCore.InMemory Base de datos en memoria de EF Core Proyecto EF Core (Microsoft) Limitaciones 6.0 Documentación
Microsoft.EntityFrameworkCore.Cosmos API de SQL de Azure Cosmos DB Proyecto EF Core (Microsoft) 6.0 Documentación
Npgsql.EntityFrameworkCore.PostgreSQL PostgreSQL Equipo de desarrollo de Npgsql 6.0 Documentación
Pomelo.EntityFrameworkCore.MySql MySQL, MariaDB Proyecto Pomelo Foundation

Ejemplo mysql:

https://jasonwatmore.com/post/2022/03/25/net-6-connect-to-mysql-database-with-entity-framework-core