Introducción a EF Core en la aplicación de consola de .NET Core con una base de datos nuevaGetting Started with EF Core on .NET Core Console App with a New database

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.In this tutorial, you create a .NET Core console app that performs data access against a SQLite database using Entity Framework Core. Se usan migraciones para crear la base de datos a partir del modelo.You use migrations to create the database from the model. Consulte ASP.NET Core: base de datos nueva para una versión de Visual Studio mediante ASP.NET Core MVC.See ASP.NET Core - New database for a Visual Studio version using ASP.NET Core MVC.

Vea un ejemplo de este artículo en GitHub.View this article's sample on GitHub.

Requisitos previosPrerequisites

Crear un proyecto nuevoCreate a new project

  • Cree un nuevo proyecto de consola:Create a new console project:

    dotnet new console -o ConsoleApp.SQLite
    

Cambiar el directorio actualChange the current directory

En los siguientes pasos, hay que emitir comandos dotnet en la aplicación.In subsequent steps, we need to issue dotnet commands against the application.

  • Se cambia el directorio actual al de la aplicación de este modo:We change the current directory to the application's directory like this:

    cd ConsoleApp.SQLite/
    

Instalación de Entity Framework CoreInstall Entity Framework Core

Para usar EF Core, instale el paquete correspondiente a los proveedores de bases de datos a los que desea dirigirse.To use EF Core, install the package for the database provider(s) you want to target. Este tutorial usa SQLite.This walkthrough uses SQLite. Para una lista de los proveedores disponibles, consulte Proveedores de bases de datos.For a list of available providers see Database Providers.

  • Instale Microsoft.EntityFrameworkCore.Sqlite y Microsoft.EntityFrameworkCore.DesignInstall Microsoft.EntityFrameworkCore.Sqlite and Microsoft.EntityFrameworkCore.Design

    dotnet add package Microsoft.EntityFrameworkCore.Sqlite
    dotnet add package Microsoft.EntityFrameworkCore.Design
    
  • Ejecute dotnet restore para instalar los paquetes nuevos.Run dotnet restore to install the new packages.

Creación del modeloCreate the model

Defina un contexto y clases de entidad que constituirán el modelo.Define a context and entity classes that make up your model.

  • Cree un archivo Model.cs nuevo con el contenido siguiente.Create a new Model.cs file with the following contents.

    using Microsoft.EntityFrameworkCore;
    using System.Collections.Generic;
    
    namespace ConsoleApp.SQLite
    {
        public class BloggingContext : DbContext
        {
            public DbSet<Blog> Blogs { get; set; }
            public DbSet<Post> Posts { get; set; }
    
            protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            {
                optionsBuilder.UseSqlite("Data Source=blogging.db");
            }
        }
    
        public class Blog
        {
            public int BlogId { get; set; }
            public string Url { get; set; }
    
            public ICollection<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; }
        }
    }
    

Sugerencia: En una aplicación real, lo habitual sería colocar cada clase en un archivo independiente, y la cadena de conexión, en un archivo de configuración o una variable de entorno.Tip: In a real application, you put each class in a separate file and put the connection string in a configuration file or environment variable. Para que el tutorial sea sencillo, todo está incluido en un archivo.To keep the tutorial simple, everything is contained in one file.

Creación de la base de datosCreate the database

Una vez que tenga un modelo, puede usar migraciones para crear una base de datos.Once you have a model, you use migrations to create a database.

  • Ejecute dotnet ef migrations add InitialCreate para aplicar scaffolding a una migración y crear el conjunto inicial de tablas para el modelo.Run dotnet ef migrations add InitialCreate to scaffold a migration and create the initial set of tables for the model.
  • Ejecute dotnet ef database update para aplicar la migración nueva a la base de datos.Run dotnet ef database update to apply the new migration to the database. Este comando crea la base de datos antes de aplicar las migraciones.This command creates the database before applying migrations.

blogging.db SQLite DB está en el directorio del proyecto.The blogging.db SQLite DB is in the project directory.

Uso del modeloUse the model

  • Abra Program.cs y reemplace el contenido por el código siguiente:Open Program.cs and replace the contents with the following code:

    using System;
    
    namespace ConsoleApp.SQLite
    {
        public class Program
        {
            public static void Main()
            {
                using (var db = new BloggingContext())
                {
                    db.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });
                    var count = db.SaveChanges();
                    Console.WriteLine("{0} records saved to database", count);
    
                    Console.WriteLine();
                    Console.WriteLine("All blogs in database:");
                    foreach (var blog in db.Blogs)
                    {
                        Console.WriteLine(" - {0}", blog.Url);
                    }
                }
            }
        }
    }
    
  • Pruebe la aplicación desde la consola.Test the app from the console. Vea la nota de Visual Studio para ejecutar la aplicación desde Visual Studio.See the Visual Studio note to run the app from Visual Studio.

    dotnet run

    Un blog se guarda en la base de datos y los detalles de todos los blogs se muestran en la consola.One blog is saved to the database and the details of all blogs are displayed in the console.

    ConsoleApp.SQLite>dotnet run
    1 records saved to database
    
    All blogs in database:
    - http://blogs.msdn.com/adonet
    

Cambios del modelo:Changing the model:

  • Si realiza cambios en el modelo, puede usar el comando dotnet ef migrations add para aplicar el scaffolding a una migración nueva.If you make changes to the model, you can use the dotnet ef migrations add command to scaffold a new migration. Una vez que compruebe el código con scaffolding (y haya hecho los cambios necesarios), puede usar el comando dotnet ef database update para aplicar los cambios de esquema a la base de datos.Once you have checked the scaffolded code (and made any required changes), you can use the dotnet ef database update command to apply the schema changes to the database.
  • EF Core usa una tabla __EFMigrationsHistory en la base de datos para realizar un seguimiento de cuáles son las migraciones que ya se aplicaron a la base de datos.EF Core uses a __EFMigrationsHistory table in the database to keep track of which migrations have already been applied to the database.
  • El motor de base de datos de SQLite no admite algunos cambios de esquema que sí son compatibles con la mayoría de las otras bases de datos relacionales.The SQLite database engine doesn't support certain schema changes that are supported by most other relational databases. Por ejemplo, no se admite la operación DropColumn.For example, the DropColumn operation is not supported. Las migraciones de EF Core generarán el código para estas operaciones.EF Core Migrations will generate code for these operations. Sin embargo, si intenta aplicarlas a una base de datos o generar un script, EF Core producirá excepciones.But if you try to apply them to a database or generate a script, EF Core throws exceptions. Consulte Limitaciones de SQLite.See SQLite Limitations. En el caso de un desarrollo nuevo, considere eliminar la base de datos y cree una nueva en lugar de usar migraciones cuando cambie el modelo.For new development, consider dropping the database and creating a new one rather than using migrations when the model changes.

Ejecutar desde Visual StudioRun from Visual Studio

Para ejecutar este ejemplo desde Visual Studio, debe establecer el directorio de trabajo como raíz del proyecto de forma manual.To run this sample from Visual Studio, you must set the working directory manually to be the root of the project. Si no establece el directorio de trabajo, se produce la siguiente excepción Microsoft.Data.Sqlite.SqliteException: SQLite Error 1: 'no such table: Blogs'.If you don't set the working directory, the following Microsoft.Data.Sqlite.SqliteException is thrown: SQLite Error 1: 'no such table: Blogs'.

Para establecer el directorio de trabajo:To set the working directory:

  • En el Explorador de soluciones, haga clic con el botón derecho en el proyecto y seleccione Propiedades.In Solution Explorer, right click the project and then select Properties.
  • Seleccione la pestaña Depurar en el panel izquierdo.Select the Debug tab in the left pane.
  • Establezca Directorio de trabajo en el directorio del proyecto.Set Working directory to the project directory.
  • Guarde los cambios.Save the changes.

Recursos adicionalesAdditional Resources