Entity Framework CoreEntity Framework Core

O EF (Entity Framework) Core é uma versão leve, extensível, de software livre e multiplataforma da popular tecnologia de acesso a dados do 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 pode servir como um mapeador relacional de objeto (O/RM), que:EF Core can serve as an object-relational mapper (O/RM), which:

  • Permite que os desenvolvedores do .NET trabalhem com um banco de dados usando objetos .NET.Enables .NET developers to work with a database using .NET objects.
  • Elimina a necessidade da maior parte do código de acesso a dados que normalmente precisa ser escrito.Eliminates the need for most of the data-access code that typically needs to be written.

O EF Core é compatível com vários mecanismos de banco de dados, consulte detalhes em Provedores de Banco de Dados.EF Core supports many database engines, see Database Providers for details.

O modeloThe model

Com o EF Core, o acesso a dados é executado usando um modelo.With EF Core, data access is performed using a model. Um modelo é composto de classes de entidade e um objeto de contexto que representa uma sessão com o banco de dados.A model is made up of entity classes and a context object that represents a session with the database. O objeto Context permite consultar e salvar dados.The context object allows querying and saving data. Para obter mais informações, consulte criando um modelo.For more information, see Creating a Model.

O EF dá suporte às seguintes abordagens de desenvolvimento de modelo:EF supports the following model development approaches:

  • Gere um modelo a partir de um banco de dados existente.Generate a model from an existing database.
  • Codifique manualmente um modelo para corresponder ao banco de dados.Hand code a model to match the database.
  • Depois que um modelo é criado, use as migrações do EF para criar um banco de dados do modelo.Once a model is created, use EF Migrations to create a database from the model. As migrações permitem a evolução do banco de dados conforme o modelo é alterado.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

As instâncias de suas classes de entidade são recuperadas do banco de dados usando a linguagem de consulta integrada (LINQ).Instances of your entity classes are retrieved from the database using Language Integrated Query (LINQ). Para obter mais informações, consulte consultando dados.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();
}

Salvando dadosSaving data

Dados são criados, excluídos e modificados no banco de dados usando as instâncias de suas classes de entidade.Data is created, deleted, and modified in the database using instances of your entity classes. Consulte Salvar dados para saber mais.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();
}

Considerações do EF O/RMEF O/RM considerations

Embora EF Core seja bom na abstração de muitos detalhes de programação, há algumas práticas recomendadas aplicáveis a qualquer O/RM que ajudam a evitar armadilhas comuns em aplicativos de produção: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:

  • O conhecimento de nível intermediário ou superior do servidor de banco de dados subjacente é essencial para arquitetar, depurar, criar um perfil e migrar dados em aplicativos de produção de alto desempenho.Intermediate-level knowledge or higher of the underlying database server is essential to architect, debug, profile, and migrate data in high performance production apps. Por exemplo, conhecimento de chaves primárias e estrangeiras, restrições, índices, normalização, instruções DML e DDL, tipos de dados, criação de perfil, etc.For example, knowledge of primary and foreign keys, constraints, indexes, normalization, DML and DDL statements, data types, profiling, etc.
  • Teste funcional e de integração: é importante replicar o ambiente de produção o mais próximo possível:Functional and integration testing: It's important to replicate the production environment as closely as possible to:
    • Encontre problemas no aplicativo que aparecem apenas ao usar uma versão ou edição específica do servidor de banco de dados.Find issues in the app that only show up when using a specific versions or edition of the database server .
    • Capturar alterações significativas ao atualizar EF Core e outras dependências.Catch breaking changes when upgrading EF Core and other dependencies. Por exemplo, adicionar ou atualizar estruturas como ASP.NET Core, OData ou AutoMapper.For example, adding or upgrading frameworks like ASP.NET Core, OData, or AutoMapper. Essas dependências podem afetar EF Core de maneiras inesperadas.These dependencies can affect EF Core in unexpected ways.
  • Teste de desempenho e estresse com cargas representativas.Performance and stress testing with representative loads. O uso simples de alguns recursos não é bem dimensionado.The naïve usage of some features doesn't scale well. Por exemplo, várias coleções incluem, uso intensivo de carregamento lento, consultas condicionais em colunas não indexadas, atualizações maciças e inserções com valores gerados pelo armazenamento, falta de manipulação de simultaneidade, modelos grandes, política de cache inadequada.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.
  • Revisão de segurança: por exemplo, manipulação de cadeias de conexão e outros segredos, permissões de banco de dados para operação que não seja de implantação, validação de entrada para SQL bruto, criptografia para informações confidenciais.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.
  • Certifique-se de que o log e o diagnóstico sejam suficientes e utilizáveis.Make sure logging and diagnostics are sufficient and usable. Por exemplo, configuração de log apropriada, marcas de consulta e Application Insights.For example, appropriate logging configuration, query tags, and Application Insights.
  • Recuperação de erro.Error recovery. Prepare as contingências para cenários comuns de falha, como reversão de versão, servidores de fallback, expansão e balanceamento de carga, mitigação de DoS e backups de dados.Prepare contingencies for common failure scenarios such as version rollback, fallback servers, scale-out and load balancing, DoS mitigation, and data backups.
  • Implantação e migração de aplicativos.Application deployment and migration. Planeje como as migrações serão aplicadas durante a implantação; fazer isso no início do aplicativo pode sofrer de problemas de simultaneidade e requer permissões mais altas do que o necessário para a operação 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 o preparo para facilitar a recuperação de erros fatais durante a migração.Use staging to facilitate recovery from fatal errors during migration. Para obter mais informações, consulte aplicando migrações.For more information, see Applying Migrations.
  • Exame detalhado e teste de migrações geradas.Detailed examination and testing of generated migrations. As migrações devem ser testadas exaustivamente antes de serem aplicadas aos dados de produção.Migrations should be thoroughly tested before being applied to production data. A forma do esquema e dos tipos de coluna não pode ser alterada facilmente depois que as tabelas contêm dados de produção.The shape of the schema and the column types cannot be easily changed once the tables contain production data. Por exemplo, em SQL Server nvarchar(max) e decimal(18, 2) raramente são os melhores tipos de colunas mapeadas para propriedades de cadeia de caracteres e decimais, mas esses são os padrões que o EF usa porque ele não tem conhecimento de seu cenário 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.

Próximas etapasNext steps

Para ver tutoriais introdutórios, confira Introdução ao Entity Framework Core.For introductory tutorials, see Getting Started with Entity Framework Core.