Introducción a EF Core

En este tutorial se crea una aplicación de consola de .NET Core que realiza el acceso a datos en una base de datos SQLite mediante Entity Framework Core.

Puede seguir el tutorial con Visual Studio en Windows o mediante la CLI de .NET en Windows, macOS o Linux.

Vea un ejemplo de este artículo en GitHub.

Requisitos previos

Instale el software siguiente:

Cree un nuevo proyecto

dotnet new console -o EFGetStarted
cd EFGetStarted

Instalación de Entity Framework Core

Para instalar EF Core, instale el paquete de los proveedores de bases de datos de EF Core que quiera establecer como destino. En este tutorial se usa SQLite porque se ejecuta en todas las plataformas compatibles con .NET. Para obtener una lista de proveedores disponibles, vea Proveedores de bases de datos.

dotnet add package Microsoft.EntityFrameworkCore.Sqlite

Creación del modelo

Defina una clase de contexto y clases de entidad que conformen el modelo.

  • En el directorio del proyecto, cree Model.cs con el código siguiente.
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; }
}

EF Core también puede aplicar ingeniería inversa en un modelo desde una base de datos existente.

Sugerencia: esta aplicación lo hace todo más fácil de forma intencionada. Las cadenas de conexión no se deben almacenar en el código para aplicaciones de producción. Además, es recomendable que divida cada clase de C# en su archivo correspondiente.

Creación de la base de datos

Los pasos siguientes usan migraciones para crear una base de datos.

  • Ejecute los comandos siguientes:

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

    Esto instala dotnet ef y el paquete de diseño necesario para ejecutar el comando en un proyecto. El comando migrations aplica la técnica scaffolding a una migración para crear el conjunto inicial de tablas para el modelo. El comando database update crea la base de datos y le aplica la nueva migración.

Creación, lectura, actualización y eliminación

  • Abra el archivo Program.cs y sustituya el contenido por el código siguiente:

    using System;
    using System.Linq;
    
    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();
    

Ejecutar la aplicación

dotnet run

Pasos siguientes