Entity Framework CoreEntity Framework Core

Entity Framework (EF) Core es una versión ligera, extensible, de código abierto y multiplataforma de la popular tecnología de acceso a datos Entity Framework.Entity Framework (EF) Core is a lightweight, extensible, open source and cross-platform version of the popular Entity Framework data access technology.

EF Core puede actuar como asignador relacional de objetos, que se encarga de lo siguiente:EF Core can serve as an object-relational mapper (O/RM), which:

  • Permite a los desarrolladores de .NET trabajar con una base de datos usando objetos .NET.Enables .NET developers to work with a database using .NET objects.
  • Permite prescindir de la mayor parte del código de acceso a datos que normalmente es necesario escribir.Eliminates the need for most of the data-access code that typically needs to be written.

EF Core es compatible con muchos motores de base de datos; vea Proveedores de bases de datos para más información.EF Core supports many database engines, see Database Providers for details.

El modeloThe model

Con EF Core, el acceso a datos se realiza mediante un modelo.With EF Core, data access is performed using a model. Un modelo se compone de clases de entidad y un objeto de contexto que representa una sesión con la base de datos.A model is made up of entity classes and a context object that represents a session with the database. Este objeto de contexto permite consultar y guardar datos.The context object allows querying and saving data. Para más información, vea Creación de un modelo.For more information, see Creating a Model.

EF admite los siguientes métodos de desarrollo de modelos:EF supports the following model development approaches:

  • Generar un modelo a partir de una base de datos existente.Generate a model from an existing database.
  • Codificar un modelo manualmente para que coincida con la base de datos.Hand code a model to match the database.
  • Una vez creado un modelo, usar Migraciones de EF para crear una base de datos a partir del modelo.Once a model is created, use EF Migrations to create a database from the model. Migraciones permite que la base de datos evolucione a medida que el modelo va cambiando.Migrations allow evolving the database as the model changes.
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;

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=Blogging;Integrated Security=True");
        }
    }

    public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }
        public int Rating { 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; }
    }
}

ConsultasQuerying

Las instancias de las clases de entidad se recuperan de la base de datos por medio de Language Integrated Query (LINQ).Instances of your entity classes are retrieved from the database using Language Integrated Query (LINQ). Para más información, vea Consulta de datos.For more information, see Querying Data.

using (var db = new BloggingContext())
{
    var blogs = db.Blogs
        .Where(b => b.Rating > 3)
        .OrderBy(b => b.Url)
        .ToList();
}

Guardado de datosSaving data

Los datos se crean, se eliminan y se modifican en la base de datos mediante instancias de las clases de entidad.Data is created, deleted, and modified in the database using instances of your entity classes. Vea Guardado de datos para más información.See Saving Data to learn more.

using (var db = new BloggingContext())
{
    var blog = new Blog { Url = "http://sample.com" };
    db.Blogs.Add(blog);
    db.SaveChanges();
}

Consideraciones de EF O/RMEF O/RM considerations

Mientras que EF Core es bueno extrayendo muchos detalles de programación, existen algunos procedimientos recomendados válidos para cualquier O/RM que ayudan a evitar errores comunes en las aplicaciones de producción:While EF Core is good at abstracting many programming details, there are some best practices applicable to any O/RM that help to avoid common pitfalls in production apps:

  • Tener un conocimiento medio o superior del servidor de base de datos subyacente es esencial para generar perfiles, diseñar, depurar y migrar datos en aplicaciones de producción de alto rendimientoIntermediate-level knowledge or higher of the underlying database server is essential to architect, debug, profile, and migrate data in high performance production apps. (por ejemplo, conocer las claves principales y externas, las restricciones, los índices, la normalización, las instrucciones DML y DDL, los tipos de datos, los perfiles, etc.).For example, knowledge of primary and foreign keys, constraints, indexes, normalization, DML and DDL statements, data types, profiling, etc.
  • Pruebas funcionales y de integración. Es importante replicar el entorno de producción de la forma más próxima posible para permitir lo siguiente:Functional and integration testing: It's important to replicate the production environment as closely as possible to:
    • Encontrar problemas en la aplicación que solo se revelan cuando se usa una edición o una versión específica del servidor de base de datos.Find issues in the app that only show up when using a specific versions or edition of the database server .
    • Detectar cambios importantes al actualizar EF Core y otras dependenciasCatch breaking changes when upgrading EF Core and other dependencies. (por ejemplo, agregar o actualizar marcos como ASP.NET Core, OData o AutoMapper).For example, adding or upgrading frameworks like ASP.NET Core, OData, or AutoMapper. Estas dependencias pueden afectar a EF Core de formas imprevistas.These dependencies can affect EF Core in unexpected ways.
  • Pruebas de rendimiento y esfuerzo con cargas representativas.Performance and stress testing with representative loads. El uso irreflexivo de algunas características no escala bien.The naïve usage of some features doesn't scale well. Por ejemplo, varias colecciones Includes, el uso intensivo de cargas diferidas, las consultas condicionales en columnas no indexadas, las inserciones y actualizaciones masivas con valores generados por el almacén, la falta de control de la simultaneidad, el uso de modelos grandes o unas directivas inadecuadas de almacenamiento en memoria caché.For example, multiple collections Includes, heavy use of lazy loading, conditional queries on non-indexed columns, massive updates and inserts with store-generated values, lack of concurrency handling, large models, inadequate cache policy.
  • Revisión de seguridad: por ejemplo, el control de las cadenas de conexión y otros secretos, los permisos de base de datos para operaciones de no implementación, la validación de entradas para SQL sin procesar o el cifrado de datos confidenciales.Security review: For example, handling of connection strings and other secrets, database permissions for non-deployment operation, input validation for raw SQL, encryption for sensitive data.
  • Asegúrese de que las capacidades de registro y diagnóstico son suficientes y utilizables,Make sure logging and diagnostics are sufficient and usable. por ejemplo, una configuración de registros adecuada, etiquetas de consulta y Application Insights.For example, appropriate logging configuration, query tags, and Application Insights.
  • Recuperación de errores.Error recovery. Prepare contingencias para afrontar escenarios de error comunes, como reversiones de versión, servidores de reserva, escalabilidad horizontal y equilibrio de carga, la mitigación de DoS y copias de seguridad de datos.Prepare contingencies for common failure scenarios such as version rollback, fallback servers, scale-out and load balancing, DoS mitigation, and data backups.
  • Implementación y migración de aplicaciones.Application deployment and migration. Planee cómo se van a aplicar las migraciones durante la implementación, ya que hacerlo en el inicio de una aplicación puede derivar en problemas de simultaneidad y requiere permisos más elevados de lo necesario para lograr un funcionamiento normal.Plan out how migrations are going to be applied during deployment; doing it at application start can suffer from concurrency issues and requires higher permissions than necessary for normal operation. Use el almacenamiento provisional para facilitar la recuperación de errores irrecuperables durante la migración.Use staging to facilitate recovery from fatal errors during migration. Para más información, vea Aplicación de migraciones.For more information, see Applying Migrations.
  • Examen y prueba detallados de las migraciones generadas.Detailed examination and testing of generated migrations. Las migraciones se deben comprobar detenidamente antes de aplicarse a los datos de producción.Migrations should be thoroughly tested before being applied to production data. La forma del esquema y los tipos de columna no son fáciles de cambiar una vez que las tablas contienen datos de producción.The shape of the schema and the column types cannot be easily changed once the tables contain production data. Por ejemplo, en SQL Server, nvarchar(max) y decimal(18, 2) no suelen ser los mejores tipos para las columnas asignadas a propiedades de cadena y decimal, pero son los valores predeterminados que EF emplea porque desconoce cuál es su escenario específico.For example, on SQL Server, nvarchar(max) and decimal(18, 2) are rarely the best types for columns mapped to string and decimal properties, but those are the defaults that EF uses because it doesn't have knowledge of your specific scenario.

Pasos siguientesNext steps

Para consultar tutoriales de introducción, vea Introducción a Entity Framework Core.For introductory tutorials, see Getting Started with Entity Framework Core.