Entity Framework Core Tutorial
Comenzando con Entity Framework Core
Buscar..
Observaciones
Entity Framework (EF) Core es una versión ligera y extensible de la popular tecnología de acceso a datos de Entity Framework.
EF Core es un asignador relacional de objetos (O / RM) que permite a los desarrolladores .NET trabajar con una base de datos utilizando objetos .NET. Elimina la necesidad de la mayoría del código de acceso a datos que los desarrolladores generalmente necesitan escribir.
Añadiendo paquetes al proyecto.
Para agregar EntityFrameworkCore a su proyecto, actualice el archivo project.json (agregue nuevas líneas en las secciones de dependencies y tools ):
"dependencies": {
...
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0",
"Microsoft.EntityFrameworkCore.Design": {
"version": "1.0.0",
"type": "build"
},
},
"tools": {
...
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
}
No olvide ejecutar la dotnet restore para descargar estos paquetes desde Internet.
Si está utilizando un RDBMS que no sea Microsoft SQLServer, reemplace Microsoft.EntityFrameworkCore.SqlServer con la versión correcta ( Microsoft.EntityFrameworkCore.Sqlite , Npgsql.EntityFrameworkCore.PostgreSQL u otro: consulte la 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 día resolverlo, por lo que aquí estoy publicando los pasos que seguí para hacer que mi Base de datos funcione por primera vez en un Class Project (.NET Core) , con una aplicación web básica .NET.
Paso 1 - Instalar .NET Core
Asegúrese de que está utilizando .NET Core no DNX (Hint: You should be able to see the .NET Core option when creating a New Project) - Si NO descargar desde aquí
Si tiene problemas al instalar .NET Core (el error es algo como Visual Studio 2015 Update 3 no está instalado correctamente): puede ejecutar la instalación usando el comando: [ DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1 ] - Lo que evitará que la instalación realice el problema de Visual Studio Check Github
Paso 2 - Crear los proyectos
Cree una nueva aplicación web principal de ASP.NET -> Luego seleccione la aplicación web en la siguiente pantalla
Agregar un proyecto de Class Library (.NET Core)
Paso 3 - Instalación de paquetes EF
Abra su archivo project.json de Class Library y pegue lo siguiente, luego guarde el archivo:
{
"version": "1.0.0-*",
"dependencies": {
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
"NETStandard.Library": "1.6.0"
},
"tools": {
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
},
"frameworks": {
"net46": {
},
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0-*"
}
}
}
}
}
Esto debería restaurar los paquetes en References
---------------- O
Puede instalarlos usando Nuget Package Manager ejecutando los siguientes comandos en la Consola de Package Manager
Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools –Pre
Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design
Nota: instale un paquete a la vez, si recibe un error después de instalar
Microsoft.EntityFrameworkCore.Tools
Luego cambia el contenido de tu sección de frameworks project.json a esto:
"frameworks": {
"net46": {
},
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0-*"
}
}
}
}
Paso 4 - Creando el modelo de base de datos
Ahora, para generar la base de datos, ejecute el siguiente comando en la Package Manager Console (NO olvide cambiar la cadena de conexión a su base de datos)
Scaffold-DbContext "Server=. ; Database=DATABASE; user id= USER ; password = PASSWORD;" Microsoft.EntityFrameworkCore.SqlServer
Esto le dará el error sobre el proyecto de inicio:
Para ello, debe agregar las mismas referencias que agregó a la Biblioteca de clases a la aplicación web .NET
Así que abre tu project.json para la aplicación web,
Bajo dependencies , agregue:
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
y bajo tools agregar:
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
Después de hacer los cambios Guardar el archivo.
Así es como se ve mi proyecto.json
Luego, ejecute de nuevo el comando en la Consola del Administrador de paquetes contra la biblioteca de clases:
Si aún no ha agregado la referencia de su biblioteca de clases a la aplicación web, recibirá este error:
Para resolver esta referencia adicional de la biblioteca de su clase a su aplicación web:
Finalmente
Ejecute el comando otra vez, en la Package Manager Console :
Scaffold-DbContext "Server=. ; Database=DATABASE; user id= USER ; password = PASSWORD;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Esto debería crear las Entidades en la Carpeta de Modelos, en la biblioteca de clases
Pasando una cadena de conexión
En mi caso aquí, 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. Así que la cadena de conexión tenía que ser dinámica.
Así que agregamos una propiedad de cadena de conexión a un constructor, y la pasamos al Contexto en el método OnConfiguring
public partial class ClientContext
{
private readonly string _connectionString;
public ClientContext(string connectionString) : base()
{
_connectionString = connectionString;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(_connectionString);
}
}
y lo usé así:
public void TestConnection()
{
var clientId = 1;
var connectionString = string.Format("Server=192.168.0.211; Database=Client_{0}; user id= USER; password = PWD;", clientId);
using (var clientContext = new ClientContext(connectionString))
{
var assets = clientContext.Users.Where(s => s.UserId == 1);
}
}
Modelar, consultar y guardar datos.
Modelo
Con EF Core, el acceso a los datos se realiza utilizando un modelo. Un modelo está 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.EntityFrameworkCore;
using System.Collections.Generic;
namespace Intro
{
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;");
}
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
}
Preguntando
Las instancias de sus clases de entidad se recuperan de la base de datos utilizando Language Integrated Query (LINQ).
using (var db = new BloggingContext())
{
var blogs = db.Blogs
.Where(b => b.Rating > 3)
.OrderBy(b => b.Url)
.ToList();
}
Guardando datos
Los datos se crean, eliminan y modifican en la base de datos utilizando instancias de sus clases de entidad.
using (var db = new BloggingContext())
{
var blog = new Blog { Url = "http://sample.com" };
db.Blogs.Add(blog);
db.SaveChanges();
}
Borrando datos
Las instancias de sus clases de entidad se recuperan de la base de datos utilizando Language Integrated Query (LINQ).
using (var db = new BloggingContext())
{
var blog = new Blog { Url = "http://sample.com" };
db.Blogs.Attach(blog);
db.Blogs.Remove(blog);
db.SaveChanges();
}
Actualización de datos
Los datos se actualizan en la base de datos utilizando instancias de sus clases de entidad.
using (var db = new BloggingContext())
{
var blog = new Blog { Url = "http://sample.com" };
var entity = db.Blogs.Find(blog);
entity.Url = "http://sample2.com";
db.SaveChanges();
}








