APRENDIZAJE
Entity Framework Core
Free unaffiliated eBook created from g
Stack Overflow contributors. #entity-
framework-Tabla de contenido
Acerca de.
Capitulo 1: Comenzando con Entity Framework Core.
Observaciones.
Examples
Ariadiendo paquets al proyecto,
Base de datos primero en Entity Framework Core con una biblioteca de clases y SQL Server.
Paso 1 - Instalar NET Core.
Paso 2 - Crear los proyectos
Paso 3 - Instalacién de paquetes EF
—- O.
Paso 4 - Creando el modelo de base de datos.
Finalmente.
Pasando una cadena de conexién
Modelar, consular y guardar datos.
Modelo.
Preguntando
Guardando datos.
Borrando datos
Actualizacién de datos.
‘Capitulo 2: Actualizacién de una relacién de muchos a muchos.
Introduccién
Examples
MVC POST Editar ejemplo
‘Capitulo 3: EF Core vs EF6.x.
Observaciones.
Examples
Comparacin lado a lado
Creditos,
e No won
10
1
11
12
12
12
14
14
14
14
18
16
16
16Acerca de
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version
from: entity-framework-core
Itis an unofficial and free Entity Framework Core ebook created for educational purposes. Alll the
content is extracted from Stack Overflow Documentation, which is written by many hardworking
individuals at Stack Overflow. It is neither affiliated with Stack Overflow nor official Entity
Framework Core.
The content is released under Creative Commons BY-SA, and the list of contributors to each
chapter are provided in the credits section at the end of this book. Images may be copyright of
their respective owners unless otherwise specified. All trademarks and registered trademarks are
the property of their respective company owners.
Use the content presented in this book at your own risk; it is not guaranteed to be correct nor
accurate, please send your feedback and corrections to [email protected]
https://riptutorial.com/es/homeCapitulo 1: Comenzando con Entity
Framework Core
Observaciones
Entity Framework (EF) Core es una version ligera y extensible de la popular tecnologia de acceso
a datos de Entity Framework.
EF Core es un asignador relacional de objetos (O / RM) que permite a los desarrolladores INET
trabajar con una base de datos utilizando objetos .NET. Elimina la necesidad de la mayoria del
cédigo de acceso a datos que los desarrolladores generalmente necesitan escribir.
Examples
Afiadiendo paquetes al proyecto.
Para agregar EntityFrameworkCore a su proyecto, actualice el archivo p=
nuevas lineas en las secciones de «: =)
(agregue
jendencies Y
"dependencies™: (
22.0.0",
Design": "1.0.0",
nmicrosoft entityFraneworkcore.s
ityFrameworkcore:
nuicrosoft
seype™: "buile
Da
to
Tools": (
"microsoft entityPraneworkcore.Tools": *1,0.0-preview2-final™
No olvide ejecutar la dotnet vestore para descargar estos paquetes desde Internet.
Si esté utiizando un RDBMS que no sea Microsoft SQLServer, reemplace
con la versién correcta (
sqlite , Npgagl.fntityfraneworkCore.Postgresol U Otro: consulte la
osoft .EntityFrameorkcore.salserv
soft EntityFrameworkCo:
documentacién del RDBMS para obtener el paquete recomendado).
Base de datos primero en Entity Framework Core con una biblioteca de
clases y SQL Server
Bueno, me tomé cerca de un dia resolverlo, por lo que aqui estoy publicando los pasos que segui
para hacer que mi Base de datos funcione por primera Vez en UN ciass Project (.weT Core) , COM
una aplicacién web basica .NET.
https://riptutorial.com/es/home 2Aseguirese de que esta utilizando NET Core no DNX (ine: ¥
cons option yen eceating a tow exojoct) ~ S1NO descargar desde =u
Si tiene problemas al instalar NET Core (el error es algo como Visual Studio 2015 Update 3 no
estd instalado correctamente): puede ejecutar la instalacién usando el comando: [
stools. Pseview2.exe sx1P_vsu_cascx~1 ]- Lo que evitar que la instalacién
realice el problema de Visual Studio Check Github
New Project
NET Framé
Bt Class Library (NET Core)
Reena
joud
eee a)
ec
Cree una nueva aplicacién web principal de ASP.NET -> Luego seleccione la aplicacién web en la
siguiente pantalla
https://riptutorial.com/es/homeNew Project
at
4 Installed
Pie ae
4 Visual C#
Cay
iy
NET Core
Et
erry
vr
Solution
NET Framew
end
Sort by
Ne cei)
Name
tion (NET Fram
(NET Frame
https://riptutorial.com/es/homeAdd New Project
Ta cen)
Pec)
Reus
caer
Da code anes
ry
.NET Core ole Application (NET Core)
Sens
Dern
Deu Pane
Location: Teper UINUO et)
Abra su archivo project. json de Class Library y pegue lo siguiente, luego guarde el archivo:
https://riptutorial.com/es/homeEsto deberia restaurar los paquetes en re#erenc:
La acs:
Pe
CER Cy
Puede instalarlos usando Nuget Package Manager ejecutando los siguientes comandos en la
Consola de Package Manager
Nota: instale un paquete a la vez, si recibe un error después de instalar
Luego cambia el contenido de tu seccién de frameworks a esto:
https://riptutorial.com/es/homePaso 4 - Creando el modelo de base de datos
Ahora, para generar la base de datos, ejecute el siguiente comando en la rackase Manager consol
(NO olvide cambiar la cadena de conexidn a su base de datos)
een Ceo
Eereettie ap etesS SiO tL tec eee Tere aon
Pee oe CL ee es Cees
Ce eC cee RSC CM crac
PM> Scaffold-DbContext “Server=192.168.0.211; Databas
Para ello, debe agregar las mismas referencias que agregé a la Biblioteca de clases a la
aplicacién web NET
Asi que abre tu son Para la aplicacion web,
Bajo cepencencies , agregue:
y bajo toot» agregar:
https://riptutorial.com/es/home 7Después de hacer los cambios Guardar el archivo.
Asi es como se ve mi proyecto,json
Se ene Sey ead
Luego, ejecute de nuevo el comando en la Consola del Administrador de paquetes contra la
biblioteca de clases:
Si atin no ha agregado la referencia de su biblioteca de clase aplicacién web, recibira este
error
iptutorial.com/es/homePM> Scaffold-DbContext “Server=192.168.0.211; Database
‘System.AggregateException: One or more errors occurred. (Could not find assembly
Microsoft .EntityFrameworkCore.Design.OperationException: Could not find assembly|
Pee ster ees Ue ee sts cana eet
eee sto ee Cd CO eee re ery eeu Sra
Se ge Cates SCM Co ae Co
at System. Threading. Tasks. Task. ThrowIfExceptional (Boolean includeTaskCanceleg
es ee
Para resolver esta referencia adicional de la biblioteca de su clase a su aplicacion web:
Poy
es
\pp
Oe
erie Name
cane
Esto deberia crear las Entidades en la Carpeta de Modelos, en la biblioteca de clases
https://riptutorial.com/es/home 9Pasando una cadena de conexion
En mi caso aqui, tenemos una aplicacién Multi Tenant, en la que cada cliente tiene su propia base
de datos, por ejemplo, Client_1, Client_2, Client_3. Asi que la cadena de conexién tenia que ser
dinamica,
Asi que agregamos una propiedad de cadena de conexién a un constructor, y la pasamos al
Contexto en el método oncontiau
public ClientContext ioe
y lo usé asi:
public vosa ennection ()
id= USER; password = PHD;*, clientId);
https://riptutorial.com/es/home 10Modelar, consultar y guardar datos.
Modelo
Con EF Core, el acceso a los datos se realiza utilizando un modelo. Un modelo esta formado por
clases de entidad y un contexto derivado que representa una sesién con la base de datos, lo que
le permite consultar y guardar datos.
Puede generar un modelo a partir de una base de datos existente, codificar a mano un modelo
para que coincida con su base de datos o usar EF Migrations para crear una base de datos a
partir de su modelo (y evolucionar a medida que su modelo cambie con el tiempo).
using Microsoft EntityPrameworkCore;
using Systen.collect ione.Genericy
pamespace Intro
(
public class BloggingContext : DbContext
i
publi.
publi
Dbset Blogs { get; set!
Dbset- Posts { get; set
protected override void Onconti
1
cing (DbContextOpt ioneBuilder optionsBuiider)
opt ionsBuilder. UseSqlServer (#*Server=(1ocaldb) \nssqllocaidb; Database=MyDatabase; Trusted Connecti
,
1
public class Blog
i
public int Blogid { get? sets }
public string Url { get? set; }
public List Poste ( gety sety |
}
public class Fost
i
public int PostId { get? set; |
public string Title | get; seti }
public string Content ( get; set }
publi.
publi
int Blogid ( gets set? }
Blog Blog { get? set; }
https://riptutorial.com/es/home 4Preguntando
Las instancias de sus clases de entidad se recuperan de la base de datos utilizando Language
Integrated Query (LINQ).
using (var dl
fi
= new Bloggingcontext ())
var blogs ~ db.5logs
Where (b => b.Rating > 3)
OrderBy (> => b.Url)
sToList ()
Guardando datos
Los datos se crean, eliminan y modifican en la base de datos utilizando instancias de sus clases
de entidad.
using (var
fi
= new BloggingContext ())
var blog ~ new Blog ( Url = "hetp://sample.con* 1
ab. Blogs.Add (blo8) +
db. Savechanges (1;
Borrando datos
Las instancias de sus clases de entidad se recuperan de la base de datos utilizando Language
Integrated Query (LINQ).
using (var a
(
= new BloggingContext ())
var blog = new Blog ( Url = *hetp://sample.com™ }
db. Blogs .Attach (blog)
db. Blogs .Renove (bl03)
ib, GaveChanges ()7
Actualizacion de datos
Los datos se actualizan en la base de datos utilizando instancias de sus clases de entidad.
using (var db ~ new BloggingContext ())
fi
https://riptutorial.com/es/home 12var blog = new Blog { Uri = "http://sample.con*
var entity = db.Blogs.Find (blog)
entity-Uri = *http://sample2.con*;
db, SaveChanges ()7
Lea Comenzando con Entity Framework Core en linea: https:/riptutorial.com/es/entity-framework-
core/topic/3796/comenzando-con-entity-framework-core
https:/riptutorial.com/es/home 13Capitulo 2: Actualizacion de una relacion de
muchos a muchos
Introduccién
Como actualizar una relacién de muchos a muchos en EF Core:
Examples
MVC POST Editar ejemplo
‘Supongamos que tenemos una clase de producto con varios colores que puede estar en muchos
productos.
public class Product
i
public int Productid { get; set; }
public 1Collection ColorProducts { get; set
}
public class ColorProduct
t
public int ProductId { get? sety }
public int Colerid { get; set 1
public virtual Color Color { gety set? )
public virtual Product Product ( get; set;
}
public class color
t
public int ColerTd { get; set; 1
public ICollection Col
Products { get? set; }
Usando esta extensién para hacerlo més facil:
public static class extensions
i
public static void TryUpdateManyToMany (this DbContext db, TEnunerable
current Ttens, IEnumerable nexrtons, Func getKey) where T ; class
i
ab. Set () .RenoveRange (current Items. Except (newItems, getKey))7
ab, Set () .AddRange (nexItens.Except (currentIzems, gotKey))7
:
public static TEnmumerablect> Except (this 1Enunerab:
other, Funcet, Tkey> getKeyFunc)
i
t> items, Tnunerablec>
return items
GroupJoin (other, getKeyFunc, getKeyFunc, (item, tempItems) => new { item,
https://riptutorial.com/es/home 14tonprtems 1)
SelectMany(t => t.tenpItems.DefaultIfEmpty(), (t, temp) => new ( ty temp 1)
Whore (t => Referencefquals (null, t.temp) || t.temp.Equals (default (1)))
Select (t => t.t.item;
La actualizacién de los colores de un producto se veria asi (un método de POST de edicién de
mvc)
[teprost]
public TActionResult sdit (Productvm va)
1
if (Modelstate. Tevalia)
i
var model = db.Products
Include (x => x.ColorProducts)
FirstOrbefault (x => x.ProductId =:
vm. Product .Product Id);
ab, TryUpdateManyToMany (model .ColorProducts, vm.Colorsselected
sSelect (x => new ColorProduct
1
colortd = x,
ProductId = vm.Product Product id
Vy x => x.colortay;
‘ob. Savechanges (7
return RedirectToAct ion ("Index");
,
return View(vm)?
public class Productvm
t
public Produet Product ( get; sets )
public IEnunerablecint> Colorsselected { get sets |
El cédigo se ha simplificado tanto como puedo, sin propiedades adicionales en ninguna clase.
Lea Actualizacién de una relacién de muchos a muchos en linea: https://riptutorial.com/es/entity-
framework-core/topic/9527 /actualizacion-de-una-relacion-de-muchos-a-muchos
https:/riptutorial.com/es/home 15Capitulo 3: EF Core vs EF6.x
Observaciones
Para obtener las ultimas actualizaciones, consulte: Comparacidn de caracteristicas
Examples
Comparacién lado a lado
La siguiente tabla compara las funciones disponibles (1) en EF Core y EF6.x.
Esté pensado para ofrecer una comparacién de alto nivel y no enumera todas las funciones, ni
intenta dar detalles sobre las posibles diferencias entre como funciona la misma funcién.
eer Ona aie
Modelado basico (clases, propiedades, etc.)
Convenciones
‘Convenciones personalizadas
Anotaciones de datos
API fluida
Herencia: Tabla por jerarquia (TPH)
Herencia: Tabla por tipo (TPT)
Herencia: Tabla por clase de concreto (TPC)
Propiedades del estado de la sombra
Llaves alternativas
Muchos a muchos: con entidad de unién
Muchos a muchos: sin entidad de union
Generacién de claves: Base de datos
Generacién de claves: Cliente
Complejos / tipos de valor
Si
Si
Si
Si
Si
Si
Si
Si
Si
Si
Si
Si
EF Core
1
si
si
Parcial
Si
Si
si
Si
Si
si
Si
Si
https://riptutorial.com/es/home
16eC a9
Datos espaciales si
Visualizacién gréfica del modelo, si
Editor grafico de arrastrar / soltar si
Formato del modelo: Cédigo. si Sf
Formato del modelo: EDMX (XML) si
Modelo de ingenieria inversa de la base de datos: linea de er
comando
Modelo de ingenieria inversa de la base de datos: asistente de VS Si
Actualizacién incremental del modelo desde la base de datos. si
eC
LINQ: consultas simples Estable Estable
LINQ: consultas moderadas Estable Estabilizador
LINQ: consultas complejas Estable En progreso
LINQ: Consultas usando propiedades de navegacin Estable En progreso
Generacién de SQL "bonita" Pobre Si
Evaluacién mixta cliente / servidor si
Cargando datos relacionados: Eager si si
Cargando datos relacionados: perezoso si
Cargando datos relacionados: Explicita si
Consultas SQL sin procesar: tipos de modelos si si
Consultas SQL sin procesar: tipos sin mapear si
Consultas SQL sin procesar: componer con LINQ si
Guardar cambios si si
Seguimiento de cambios: Instanténea si St
https://riptutorial.com/es/homeeee ETC eae a
‘Seguimiento de cambios: Notificacion Si Si
Acceso al estado rastreado si Parcial
Concurrencia optimista Si Si
Actas Si Si
Lote de declaraciones Si
Procedimiento almacenado Si
‘Compatibilidad con gréficos separados (N-Tier): API de bajo nivel Pobre Si
Compatibilidad con gréficos separados (N-Tier): extremo a extremo Pobre
Clee acuni . baie
Migraciones Smee!
API de creacién / eliminacién de bases de datos si [si
Datos de semillas si
Resiliencia de conexién si
Enganches del ciclo de vida (eventos, intercepcién de comandos,
3 si
Fremnermoner coos eenjercontee |
servidor SQL si Si
MysaL Si Solo pagado, no pagado préximamente (2)
PostgreSQL si Si
Oraculo Si Solo pagado, no pagado préximamente (2)
SaLite Si Si
Compacto de SQL Sie | ci
DB2 Sie sh
InMemory (para pruebas) si
Azure Table Storage Prototipo
https://riptutorial.com/es/home 18eee eek red Eo rea
Redis
Prototipo
DCR Or eee a
WinForms. Si
WPF
Consola Si
ASP.NET Si
ASP.NET Core
Xamarin
Uwe.
Notas al pie:
(1): A partir de 2016/10/18
Si
Si
Si
Si
Si
Proximamente (3)
Si
(2): Los proveedores pagados estan disponibles, se esta trabajando en los proveedores no
pagados. Los equipos que trabajan en los proveedores no pagados no han compartido detalles
pubblicos de la linea de tiempo, ete.
(3): EF Core esta disefiado para funcionar en Xamarin cuando el soporte para NET Standard
esta habilitado en Xamarin.
Lea EF Core vs EF6.x en linea: https://riptutorial.com/es/entity-framework-core/topic/751 3/ef-core-
vs-ef6-x
https://riptutorial.com/es/home
19Creditos
Eee ails
‘Comenzando con
1 Entity Framework
Core
Actualizacién de una
2 relacién de muchos
a muchos
3 EF Core vs EF6.x
Community, Dawood Awan, Dmitry, hasan, natemcmaster,
NovaDey, tmg, uTeisT
Paw Ormstrup Madsen
Frédéric, Ruud Lenders, uTeisT
https://riptutorial.com/es/home
20