Introducción

Las bases de datos nos ayudan a almacenar información y, en el caso de las relacionales, gestionar cómo las entidades se relacionan entre ellas.

Vamos a aprender cómo se generan relaciones entre entidades con EF Core.

Algo muy importante en esta sección es el uso de las convenciones en EF Core, que están especificadas en la documentación de Microsoft. Las convenciones de este ORM nos ayudan a definir las relaciones entre entidades a través de los nombres que les damos a las propiedades que señalan a otras entidades. EF Core nos acerca a las relaciones entre entidades a través de la programación orientada a objetos y las conecta a través de lo que llama Navigation Properties (o Propiedades de Navegación en nuestro idioma).

A través de una Navigation Property podemos hacer referencia a una entidad de forma única o a través de una colección, generando diferentes tipos de relaciones: de uno-a-uno (1:1, one-to-one), de uno-a-muchos (1:N, one-to-many), de muchos-a-muchos (N:N, many-to-many)…

Con estas referencias ya podemos generar relaciones entre entidades, pero no es la única forma. Si necesitas concretar o definir relaciones más complejas a través de código, el DbContext de nuestra aplicación nos ofrece herramientas para definir cómo estas entidades en nuestra solución se conectan.

Definiendo una nueva entidad

Vamos a definir una nueva entidad Author para relacionarla con la entidad Post.

En nuestra aplicación, cada post tiene una persona que lo escribe, pero una persona puede tener varios posts escritos, por lo que crearemos una relación de tipo 1:N.

Empezamos creando la entidad Author, que tendrá las siguientes propiedades: identificador, username y nombre.

Entidad Author

Nos toca modificar la entidad Post para indicar la relación en la otra dirección:

Modificando la entidad Post para reflejar la relación con la entidad Author

En la entidad Author, tenemos la propiedad Posts, que indica la lista de artículos escritos por una entidad Author.

En la entidad Post, tenemos dos propiedades nuevas:

  • AuthorId, que es el identificador del Author con el que está relacionado el artículo. Al hacer una consulta este valor se carga automáticamente.
  • Author es la entidad en la que caerá toda la información de una entidad cuando es cargada. Este valor, por defecto, es nulo. Si hacemos una consulta de Post, tenemos que indicar en la consulta de forma explícita que queremos esa propiedad cargada con los datos de la base de datos. Esto ocurre dado el eager loading (o carga diligente en nuestro idioma).

Especificando relaciones

Habiendo creado las entidades tal y como las hemos definido, podemos añadir otro nivel de especificación de nuestras relaciones en nuestro DbContext.

Para ello usaremos las Navigation Properties, referenciándolas en el método a sobrecargar llamado OnModelCreating, que es donde los modelos son generados en la base de datos.

Utilizaremos FluentAPI, una herramienta con la que podemos definir y detallar nuestras entidades en EF Core.

Con FluentAPI, declaramos que para cada Post hay una entidad Author, que a su vez tiene una colección de Post’s, creando una relación 1:N.

En el código se expresa de la siguiente forma:

Añadiendo la colección Authors y definiendo las relaciones

Después de especificar cómo se van a relacionar las entidades, cómo vamos a almacenar los diferentes datos y las distintas propiedades en nuestro código C#, es hora de realizar una nueva migración.

Si quieres seguir aprendiendo sobre FluentAPI, no dudes en visitar la documentación para descubrir qué más te puede aportar: añadir índices, configurar columnas en nuestras tablas…

La migración, como ya sabemos, debería tener un título descriptivo, como por ejemplo AddEntityAuthor. Al generar la migración con EF Core, veremos en el fichero de migración que se ha generado cómo las relaciones entre entidades se han establecido… y cómo deshacerlas en caso de que necesitemos corregir esta nueva relación.

Si la relación ha sido definida correctamente y la migración se ejecuta con éxito, ¡ya hemos dado un primer gran paso en nuestra base de datos!

Todo preparado para conquistar el mundo del desarrollo con tu nueva aplicación que se apoye en EF Core.

Conclusiones

Y esto es todo (¡Por ahora!) en lo que a Entity Framework Core se refiere. Ha sido una introducción a sus principales características y cómo empezar a trabajar con este ORM.

Espero que sea útil, instructivo y también entretenido.

No dudes en dejar un comentario si tienes alguna duda, te gustaría descubrir alguna acción específica en EF Core o cualquier otra cuestión que te gustaría aprender sobre .NET. Tarde o temprano, volveré a escribir en PuntoTech para seguir ofreciendo mi conocimiento para quien lo necesite, ¡Y recuerda que tú también puedes participar en este fantástico grupo si quieres compartir tu sabiduría!

¡Saludos!

--

--

Elena G
DotTech

.NET developer | Microsoft MVP | speaker | worldbuilding, storytelling 📝🌃 | gamedev, futurism 💻📱🎮 | she/they | ⚾ https://twitter.com/Beelzenef_