Introdução ao EF Core

Neste tutorial, você criará um aplicativo de console do .NET Core que executa 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 Core no Windows, macOS ou Linux.

Exiba o exemplo deste artigo no GitHub.

Pré-requisitos

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 dos provedores do banco de dados do EF Core para o qual você deseja direcionar. Este tutorial usa SQLite porque ele é executado em todas as plataformas que dão suporte a .NET Core. Para obter uma lista de provedores disponíveis, veja 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 seguinte código
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;

namespace EFGetStarted
{
    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 a engenharia reversa de um modelo de um banco de dados existente.

Dica: esse aplicativo mantém intencionalmente as coisas simples para fins de clareza. As cadeias de conexão não devem ser armazenadas no código para aplicativos de produção. Também pode ser interessante dividir cada classe C# em um arquivo próprio.

Criar o banco de dados

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

  • Execute os seguintes comandos:

    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 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 comando database update cria o banco de dados e aplica a nova migração a ele.

Criar, ler, atualizar & exclusão

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

    using System;
    using System.Linq;
    
    namespace EFGetStarted
    {
        internal class Program
        {
            private static void Main()
            {
                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" });
                    db.SaveChanges();
    
                    // Read
                    Console.WriteLine("Querying for a blog");
                    var blog = db.Blogs
                        .OrderBy(b => b.BlogId)
                        .First();
    
                    // 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!" });
                    db.SaveChanges();
    
                    // Delete
                    Console.WriteLine("Delete the blog");
                    db.Remove(blog);
                    db.SaveChanges();
                }
            }
        }
    }
    

Executar o aplicativo

dotnet run

Próximas etapas