Compartilhar via


Introdução ao EF Core

Neste tutorial, você criará um aplicativo de console do .NET que executa o acesso a dados em um banco de dados SQLite usando o Entity Framework Core.

Você pode seguir o tutorial usando o Visual Studio no Windows ou usando a CLI do .NET no Windows, macOS ou Linux.

Exiba o exemplo deste artigo no GitHub.

Prerequisites

Instale o software a seguir:

Criar um novo projeto

dotnet new console -o EFGetStarted
cd EFGetStarted

Instalar o Entity Framework Core

Para instalar o EF Core, instale o pacote para o(s) provedor(es) de banco de dados EF Core que você deseja utilizar. Este tutorial usa o SQLite porque ele é executado em todas as plataformas compatíveis com o .NET. Para obter uma lista de provedores disponíveis, consulte Provedores de Banco de Dados.

dotnet add package Microsoft.EntityFrameworkCore.Sqlite

Criar o modelo

Defina uma classe de contexto e classes de entidade que compõem o modelo.

  • No diretório do projeto, crie Model.cs com o código a seguir
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    public string DbPath { get; }

    public BloggingContext()
    {
        var folder = Environment.SpecialFolder.LocalApplicationData;
        var path = Environment.GetFolderPath(folder);
        DbPath = System.IO.Path.Join(path, "blogging.db");
    }

    // The following configures EF to create a Sqlite database file in the
    // special "local" folder for your platform.
    protected override void OnConfiguring(DbContextOptionsBuilder options)
        => options.UseSqlite($"Data Source={DbPath}");
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public List<Post> Posts { get; } = new();
}

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

O EF Core também pode fazer engenharia reversa de um modelo de um banco de dados existente.

Dica: este aplicativo intencionalmente mantém as coisas simples para maior clareza. As cadeias de conexão não devem ser armazenadas no código para aplicativos de produção. Talvez você também queira dividir cada classe C# em seu próprio arquivo.

Criar o banco de dados

As etapas a seguir usam migrações para criar um banco de dados.

  • Execute os comandos a seguir:

    dotnet tool install --global dotnet-ef
    dotnet add package Microsoft.EntityFrameworkCore.Design
    dotnet ef migrations add InitialCreate
    dotnet ef database update
    

    Isso instala o dotnet ef e o pacote de design que é necessário para executar o comando em um projeto. O comando migrations realiza o scaffolding de uma migração e cria o conjunto inicial de tabelas para o modelo. O database update comando cria o banco de dados e aplica a nova migração a ele.

Criar, ler, atualizar & excluir

  • Abra Program.cs e substitua o conteúdo pelo seguinte código:

    using System;
    using System.Linq;
    using Microsoft.EntityFrameworkCore;
    
    using var db = new BloggingContext();
    
    // Note: This sample requires the database to be created before running.
    Console.WriteLine($"Database path: {db.DbPath}.");
    
    // Create
    Console.WriteLine("Inserting a new blog");
    db.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });
    await db.SaveChangesAsync();
    
    // Read
    Console.WriteLine("Querying for a blog");
    var blog = await db.Blogs
        .OrderBy(b => b.BlogId)
        .FirstAsync();
    
    // Update
    Console.WriteLine("Updating the blog and adding a post");
    blog.Url = "https://devblogs.microsoft.com/dotnet";
    blog.Posts.Add(
        new Post { Title = "Hello World", Content = "I wrote an app using EF Core!" });
    await db.SaveChangesAsync();
    
    // Delete
    Console.WriteLine("Delete the blog");
    db.Remove(blog);
    await db.SaveChangesAsync();
    

Executar o aplicativo

dotnet run

Próximas etapas