Partilhar via


Núcleo do Entity Framework

O Entity Framework (EF) Core é uma versão leve, extensível, de código aberto e multiplataforma da popular tecnologia de acesso a dados do Entity Framework.

O EF Core pode servir como um mapeador objeto-relacional (O/RM), que:

  • Permite que os desenvolvedores .NET trabalhem com um banco de dados usando objetos .NET.
  • Elimina a necessidade da maioria do código de acesso a dados que normalmente precisa ser escrito.

O EF Core suporta muitos mecanismos de banco de dados, consulte Provedores de banco de dados para obter detalhes.

O modelo

Com o EF Core, o acesso aos dados é realizado usando um modelo. Um modelo é composto de classes de entidade e um objeto de contexto que representa uma sessão com o banco de dados. O objeto de contexto permite consultar e salvar dados. Para obter mais informações, consulte Criando um modelo.

A EF apoia as seguintes abordagens de desenvolvimento de modelos:

  • Gere um modelo a partir de um banco de dados existente.
  • Codifique manualmente um modelo para corresponder ao banco de dados.
  • Depois que um modelo for criado, use Migrações EF para criar um banco de dados a partir do modelo. As migrações permitem evoluir o banco de dados à medida que o modelo muda.
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;Trusted_Connection=True;ConnectRetryCount=0");
    }
}

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; }
}

Consultar

As instâncias das suas classes de entidade são recuperadas da base de dados usando o Language Integrated Query (LINQ). Para obter mais informações, consulte Consultando dados.

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

Guardar dados

Os dados são criados, excluídos e modificados no banco de dados usando instâncias de suas classes de entidade. Consulte Guardar dados para saber mais.

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

Considerações sobre EF O/RM

Embora o EF Core seja bom em abstrair muitos detalhes de programação, existem algumas práticas recomendadas aplicáveis a qualquer O/RM que ajudam a evitar armadilhas comuns em aplicativos de produção:

  • O conhecimento de nível intermediário ou superior do servidor de banco de dados subjacente é essencial para arquitetar, depurar, criar perfis e migrar dados em aplicativos de produção de alto desempenho. 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 perfis, etc.
  • Testes funcionais e de integração: é importante replicar o ambiente de produção o mais próximo possível para:
    • Encontre problemas no aplicativo que só aparecem ao usar uma versão ou edição específica do servidor de banco de dados.
    • Detete alterações significativas ao atualizar o EF Core e outras dependências. Por exemplo, adicionando ou atualizando estruturas como ASP.NET Core, OData ou AutoMapper. Essas dependências podem afetar o EF Core de maneiras inesperadas.
  • Testes de desempenho e esforço com cargas representativas. O uso ingênuo de alguns recursos não se dimensiona bem. Por exemplo, várias coleções, incluíções múltiplas, uso intenso de carregamento preguiçoso, consultas condicionais em colunas não indexadas, atualizações massivas e inserções com valores gerados pela base de dados, falta de gestão de concorrência, modelos grandes e política de cache inadequada.
  • 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 de não-implantação, validação de entrada para SQL bruto, criptografia para dados confidenciais. Consulte Fluxos de autenticação seguros para obter a configuração segura e o fluxo de autenticação.
  • Certifique-se de que o registo e o diagnóstico são suficientes e utilizáveis. Por exemplo, configuração de log apropriada, tags de consulta e Application Insights.
  • Recuperação de erros. Prepare contingências para cenários comuns de falha, como reversão de versão, servidores de fallback, escalabilidade horizontal e balanceamento de carga, mitigação de DoS e backups de dados.
  • Implantação e migração de aplicativos. Planejar como as migrações serão aplicadas durante a implantação; Fazê-lo no início do aplicativo pode sofrer problemas de simultaneidade e requer permissões mais altas do que o necessário para a operação normal. Use o preparo para facilitar a recuperação de erros fatais durante a migração. Para obter mais informações, consulte Aplicação de Migrações.
  • Exame detalhado e teste das migrações geradas. As migrações devem ser exaustivamente testadas antes de serem aplicadas aos dados de produção. A forma do esquema e os tipos de coluna não podem ser facilmente alterados quando as tabelas contêm dados de produção. Por exemplo, no SQL Server, nvarchar(max) e decimal(18, 2) raramente são os melhores tipos para colunas mapeadas para propriedades de cadeia de caracteres e decimais, mas esses são os padrões que o EF usa porque não tem conhecimento do seu cenário específico.

Próximos passos

Para tutoriais introdutórios, consulte Introdução ao Entity Framework Core.