Entity Framework Core es una tecnología de acceso a datos para .NET Core y .NET Framework. Es multiplataforma y de código abierto desarrollado por Microsoft con aportes de la comunidad. Propiamente dicho es un asignador objeto relacional o ORM por sus siglas en inglés. Su función principal es servir como interprete entre dos tecnologías fundamentadas en distintos principios por un lado la programación orientada a objetos y por el otro las bases de datos relacionales y no relacionales.

Permite al programador controlar una base de datos relacional usando un lenguaje de programación en lugar de SQL estándar o uno de sus dialectos.Libera al programador de escribir gran cantidad de código repetitivo para acceder a los datos.

Favorece el principio de convención sobre configuración muy al estilo de Ruby On Rails lo que permite al programador de escribir gran cantidad de código de configuración. Esperen un post sobre todas las convenciones de para Entity Framework Core. En este artículo solo se hace mención de la convención para las llaves primarias que espera que una clase tenga una propiedad llamada Id o <[NombreClase]Id>.

La configuración se puede hacer mediante Fluent API</span> o Anotaciones de Datos. La primera esta basada en métodos de extensión y la segunda en atributos.

A continuación un serie de preguntas y respuestas que pueden servir como introducción para conocer este framework.

¿ Con que bases de datos puedo usar Entity Framework Core ?

Entity Framework Core tiene un modelo de proveedores lo que permite usarlo con multiples bases de datos. Solamente es necesario instalar el paquete de Nuget correspondiente y construir la cadena de conexión.

A continuación una lista de ejemplos de algunas bases de datos con las que puedes usar Entity Framework Core y la dirección del paquete de Nuget

Base de dato Paquete de Nuget
SqlServer Microsoft.EntityFrameworkCore.SqlServe
SQLite Microsoft.EntityFrameworkCore.Sqlite
Oracle Oracle.EntityFrameworkCore
MySql MySql.Data.EntityFrameworkCore
PostgreSQL Npgsql.EntityFrameworkCore.PostgreSQL

¿Dónde esta el repositorio de Entity Framework Core?

El código fuente de Entity Framework Core esta alojado en Github. Puedes clonar el código a tu computadora y explorar los detalles del código fuente.

git clone https://github.com/aspnet/EntityFrameworkCore.git 

Adicionalmente se pueden ver los “issues” y realizar contribuciones al código.

¿Con que lenguajes de programación puedo usar Entity Framework Core?

Se puede utilizar con los lenguajes C#, Visual Basic y F#.

¿ En qué proyectos puedo usar Entity Framework Core ?

Con cualquier tipo de proyecto de .NET Core y para cualquier tipo de proyecto .NET Framework que use la version 4.6.1 o superior.

¿Cuál es la relación entre los características de SQL y los de C#?

SQL Programación orientada a objetos
Base de datos Clase que hereda de DbContext
Tabla Clase DbSet
Columnas Propiedades o campos
Llaves primarias  
Llaves foráneas  
Restricciones  
Store Procedures Query Types
Funciones  

¿ Que debería saber para usar Entity Framework Core ?

Métodos de extensión. Expresiones Lamda LINQ Atributos C# SQL Básico

¿Como se instala Entity Framework Core ?

Se instala mediante paquetes de NuGet lo que lo hacen muy ligero. Y lo puedes hacer mediante la linea de comandos, la interfaz grafica del gestor de paquetes de Visual Studio o mediante Power Shell.

Utiliza un modelo llamado Code Firts en donde se escriben las clases del dominio y a partir de ellas se crea la base de datos. También es posible crear un modelo a partir de una base de datos existente.

Cuenta con una interfaz de linea de comandos dotnet ef que permite :

  1. Crear y modificar la base de datos
  2. Generar clases a partir de una base de datos existentes.
  3. Gestionar los cambios a la base de datos.

Imagen de linea de comando Entity Framework Core

¿ Cuales son las versiones de Entity Framework Core ?

La ultima version es 2.2 al momento de actualizar este artículo. Cada liberación de una nueva versión de EF Core va acompañada de un post donde mencionan las nuevas características de la misma. Actualmente ya esta anunciada la próxima liberación de Entity Framework 3.0 para septiembre de 2019 dentro del evento virtual de 3 días .NET Conf 2019 y para 2020 estará disponible .NET 5.0

Versión Fecha de lanzamiento Detalles
3.0 septiembre 2019  
2.2 04 Diciembre 2018 Announcing Entity Framework Core 2.2
2.1 30 Mayo 2018 Announcing Entity Framework Core 2.1
2.0 14 Agosto 2017 Announcing Entity Framework Core 2.0
1.1 16 Noviembre 2016 Announcing Entity Framework Core 1.1
1.0 27 Junio 2016 Announcing Entity Framework Core 1.0

¿Cuales son los principales componentes de Entity Framework Core?

Entity framework Core utiliza los siguientes espacios de nombres

Microsoft.EntityFrameworkCore
System.ComponentModel.DataAnnotations.Schema
System.ComponentModel.DataAnnotations

Las clases principales son DbContext y DbSet

Ejemplo Simple: Crear una tabla en un gestor de bases de datos.

El siguiente ejemplo se crea una clase llamada Producto a partir de aquí se muestra la tabla creada en en SQL Server, SQLite, MySql, PostgreSQL y Firebird.

Proyecto

Se utilizara un proyecto de consola para mostrar el funcionamiento básico de Entity Framework Core. Se especifican los pasos para crearlo mediante la linea de comandos

  1. Crear una solución dentro de la carpeta IntroEfCore
dotnet new sln -o IntroEfCore  
  1. Abrir la carpeta IntroEFCore cd IntroEFCore y crear un proyecto de consola especificando la opción -o para definir el directorio del proyecto.
dotnet new console -o EFCoreSimple
  1. Agregar el proyecto a la solución
dotnet sln add  EFCoreSimple/EFCoreSimple.csproj
  1. Agregar los paquetes de Nuget de Entity Framework.
dotnet add EFCoreSimple/EFCoreSimple.csproj package Microsoft.EntityFrameworkCore
dotnet add EFCoreSimple/EFCoreSimple.csproj package Microsoft.EntityFrameworkCore.Design
dotnet add EFCoreSimple/EFCoreSimple.csproj package Microsoft.EntityFrameworkCore.Relational
  1. (Opcional) Si deseas probar con distintas bases de datos debes instalar el paquete de Nuget del proveedores correspondiente.
  • Para Sql Server
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
  • Para MySQL
dotnet add package Pomelo.EntityFrameworkCore.MySql
  • Para SQLite
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
  • Para PostgresSqL
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
  1. Abrir Visual Studio Code. Si así lo deseas puedes continuar con Visual Studio 2017 solo debes abrir la solución creada en el punto 1.
 code .

El código

  1. Agregar un archivo llamado Producto.cs y colocar el siguiente código.
    public class Producto
    {
        public int ProductId { get; set; }
        public string Nombre { get; set; }
        public bool Disponible { get; set; }
        public int CategoriaId { get; set; }
        public decimal Price { get; set; }
    }
  1. Agregar un archivo llamado ProductoContext.cs y crear una clase que herede de DbContext con el siguiente código.
   public class ProductContext : DbContext

    {
        public DbSet<Producto> Productos { get; set; }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("Data Source=.;Initial Catalog=EfCoreDb;Integrated Security=True");
            base.OnConfiguring(optionsBuilder);
        }
    }
  1. Ejecutar el comando dotnet para aplicar una migración
dotnet add migration

Para llevar

Modelo Anémico

Repository

Unit of Work

Lazy Loading