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 Core en Windows, macOS o Linux.

Vea un ejemplo de este artículo en GitHub.

Requisitos previos

Instale el software siguiente:

Crear un proyecto nuevo

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. Este tutorial usa SQLite porque se ejecuta en todas las plataformas compatibles con .NET Core. 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 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; private set; }

        public BloggingContext()
        {
            var folder = Environment.SpecialFolder.LocalApplicationData;
            var path = Environment.GetFolderPath(folder);
            DbPath = $"{path}{System.IO.Path.DirectorySeparatorChar}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 List<Post>();
    }

    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 & eliminación

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

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

Ejecutar la aplicación

dotnet run

Pasos siguientes