Entity Framework Core usa un conjunto de convenciones para compilar un modelo basado en la forma de las clases de entidad. Puede especificar una configuración adicional para complementar o reemplazar lo que se ha detectado por convención.
Categoría: C#
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:
https://www.learnentityframeworkcore.com/configuration/data-annotation-attributes
https://www.c-sharpcorner.com/article/model-validation-using-data-annotations-in-asp-net-mvc/
Carga ansiosa diligente
https://docs.microsoft.com/es-es/ef/core/querying/related-data/eager
using (var context = new BloggingContext()) { var blogs = context.Blogs .Include(blog => blog.Posts) .ThenInclude(post => post.Author) .ToList(); }
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
Ejercicio CodeFirst
Crear una entidad Alumno con los campos:
Id
Nombre
DNI
Email
Y dad los pasos necesarios para añadir esta entidad a la tabla Pasiona
Ejercicio Regex
Con el código de los enlaces, hacer un programa que nos busque todas las imágenes de una página web.
Bonus track: Descargarlas en una carpeta