Introducción a EF Core en ASP.NET Core con una base de datos nuevaGetting Started with EF Core on ASP.NET Core with a New database

En este tutorial compilará una aplicación de MVC de ASP.NET Core que realiza el acceso a datos básicos mediante Entity Framework Core.In this tutorial, you build an ASP.NET Core MVC application that performs basic data access using Entity Framework Core. El tutorial usa migraciones para crear la base de datos a partir del modelo de datos.The tutorial uses migrations to create the database from the data model.

Puede seguir el tutorial con Visual Studio 2017 en Windows o mediante la CLI de .NET Core en Windows, macOS o Linux.You can follow the tutorial by using Visual Studio 2017 on Windows, or by using the .NET Core CLI on Windows, macOS, or Linux.

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

Requisitos previosPrerequisites

Instale el software siguiente:Install the following software:

Crear un proyecto nuevoCreate a new project

  • Abra Visual Studio 2017Open Visual Studio 2017
  • Archivo > Nuevo > ProyectoFile > New > Project
  • En el menú izquierdo, seleccione Instalado > Visual C# > .NET Core.From the left menu, select Installed > Visual C# > .NET Core.
  • Seleccione Aplicación web de ASP.NET Core.Select ASP.NET Core Web Application.
  • Escriba EFGetStarted.AspNetCore.NewDb como el nombre y haga clic en Aceptar.Enter EFGetStarted.AspNetCore.NewDb for the name and click OK.
  • En el cuadro de diálogo Nueva aplicación web de ASP.NET Core, haga lo siguiente:In the New ASP.NET Core Web Application dialog:
    • Asegúrese de que .NET Core y ASP.NET Core 2.1 estén seleccionados en las listas desplegablesMake sure that .NET Core and ASP.NET Core 2.1 are selected in the drop-down lists
    • Seleccione la plantilla de proyecto Aplicación web (Model-View-Controller) .Select the Web Application (Model-View-Controller) project template
    • Asegúrese de que Autenticación esté establecido en Sin autenticaciónMake sure that Authentication is set to No Authentication
    • Haga clic en Aceptar.Click OK

Advertencia: Si usa Cuentas de usuario individuales en lugar de Ninguno para Autenticación, se agrega un modelo de Entity Framework Core al proyecto en Models\IdentityModel.cs.Warning: If you use Individual User Accounts instead of None for Authentication then an Entity Framework Core model will be added to the project in Models\IdentityModel.cs. Con las técnicas que aprenderá en este tutorial podrá elegir agregar un segundo modelo o extender este modelo existente para contener las clases de entidad.Using the techniques you learn in this tutorial, you can choose to add a second model, or extend this existing model to contain your entity classes.

Instalación de Entity Framework CoreInstall 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.To install EF Core, you install the package for the EF Core database provider(s) you want to target. Para obtener una lista de proveedores disponibles, vea Proveedores de bases de datos.For a list of available providers, see Database Providers.

Para este tutorial no tendrá que instalar ningún paquete de proveedor porque se usa SQL Server.For this tutorial, you don't have to install a provider package because the tutorial uses SQL Server. El paquete de proveedor de SQL Server está incluido en el metapaquete Microsoft.AspNetCore.App.The SQL Server provider package is included in the Microsoft.AspnetCore.App metapackage.

Creación del modeloCreate the model

Defina una clase de contexto y clases de entidad que conformen el modelo.Define a context class and entity classes that make up the model.

  • Haga clic con el botón derecho en la carpeta Modelos y seleccione Agregar > Clase.Right-click on the Models folder and select Add > Class.

  • Escriba Model.cs como el nombre y haga clic en Aceptar.Enter Model.cs as the name and click OK.

  • Reemplace el contenido del archivo por el código siguiente:Replace the contents of the file with the following code:

    using Microsoft.EntityFrameworkCore;
    using System.Collections.Generic;
    
    namespace EFGetStarted.AspNetCore.NewDb.Models
    {
        public class BloggingContext : DbContext
        {
            public BloggingContext(DbContextOptions<BloggingContext> options)
                : base(options)
            { }
    
            public DbSet<Blog> Blogs { get; set; }
            public DbSet<Post> Posts { get; set; }
        }
    
        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; }
        }
    }
    

Una aplicación de producción normalmente colocaría cada clase en un archivo independiente.A production app would typically put each class in a separate file. Por simplicidad, este tutorial coloca estas clases en un archivo.For the sake of simplicity, this tutorial puts these classes in one file.

Registro del contexto con inserción de dependenciasRegister the context with dependency injection

Para que BloggingContext esté disponible para los controladores MVC, debe registrarlo como servicio en Startup.cs.To make BloggingContext available to MVC controllers, register it as a service in Startup.cs.

Los servicios (como BloggingContext), se registran con la inyección de dependencias durante el inicio de la aplicación para que puedan proporcionarse automáticamente a los componentes que consumen servicios (como los controladores MVC) mediante las propiedades y los parámetros del constructor.Services (such as BloggingContext) are registered with dependency injection during application startup so that they can be provided automatically to components that consume services (such as MVC controllers) via constructor parameters and properties.

  • En Startup.cs, agregue las siguientes instrucciones using:In Startup.cs add the following using statements:

    using EFGetStarted.AspNetCore.NewDb.Models;
    using Microsoft.EntityFrameworkCore;
    
  • Agregue el siguiente código resaltado al método ConfigureServices:Add the following highlighted code to the ConfigureServices method:

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });
    
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    
        var connection = @"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.AspNetCore.NewDb;Trusted_Connection=True;ConnectRetryCount=0";
        services.AddDbContext<BloggingContext>
            (options => options.UseSqlServer(connection));
        // BloggingContext requires
        // using EFGetStarted.AspNetCore.NewDb.Models;
        // UseSqlServer requires
        // using Microsoft.EntityFrameworkCore;
    }
    

Una aplicación de producción normalmente colocaría la cadena de conexión en una variable de entorno o un archivo de configuración.A production app would typically put the connection string in a configuration file or environment variable. Por simplicidad, en este tutorial se define en código.For the sake of simplicity, this tutorial defines it in code. Para más información, consulte Cadenas de conexión.See Connection Strings for more information.

Creación de la base de datosCreate the database

Los pasos siguientes usan migraciones para crear una base de datos.The following steps use migrations to create a database.

  • Herramientas > Administrador de paquetes NuGet > Consola del Administrador de paquetesTools > NuGet Package Manager > Package Manager Console

  • Ejecute los comandos siguientes:Run the following commands:

    Add-Migration InitialCreate
    Update-Database
    

    Si se produce un error que indica The term 'add-migration' is not recognized as the name of a cmdlet, cierre y vuelva a abrir Visual Studio.If you get an error stating The term 'add-migration' is not recognized as the name of a cmdlet, close and reopen Visual Studio.

    El comando Add-Migration aplica la técnica scaffolding a una migración para crear el conjunto inicial de tablas para el modelo.The Add-Migration command scaffolds a migration to create the initial set of tables for the model. El comando Update-Database crea la base de datos y le aplica la nueva migración.The Update-Database command creates the database and applies the new migration to it.

Creación de un controladorCreate a controller

Aplique scaffolding a un controlador y a las vistas de la entidad Blog.Scaffold a controller and views for the Blog entity.

  • Haga clic con el botón derecho en la carpeta Controladores del Explorador de soluciones y seleccione Agregar > Controlador.Right-click on the Controllers folder in Solution Explorer and select Add > Controller.
  • Seleccione Controlador de MVC con vistas que usan Entity Framework y haga clic en Agregar.Select MVC Controller with views, using Entity Framework and click Add.
  • Establezca la clase de modelo en Blog y Clase de contexto de datos en BloggingContext.Set Model class to Blog and Data context class to BloggingContext.
  • Haga clic en Agregar.Click Add.

El motor de scaffolding crea los siguientes archivos:The scaffolding engine creates the following files:

  • Un controlador (Controllers/BlogsController.cs)A controller (Controllers/BlogsController.cs)
  • Vistas de Razor para las páginas Create, Delete, Details, Edit e Index (Views/Blogs/*.cshtml)Razor views for Create, Delete, Details, Edit, and Index pages (Views/Blogs/*.cshtml)

Ejecutar la aplicaciónRun the application

  • Depurar > Iniciar sin depurarDebug > Start Without Debugging
  • Navegue a /Blogs.Navigate to /Blogs

  • Use el vínculo Crear nuevo para crear algunas entradas de blog.Use the Create New link to create some blog entries.

    Página Crear

  • Pruebe los vínculos Detalles, Editar y Eliminar.Test the Details, Edit, and Delete links.

    Página de índice

Otros tutorialesAdditional tutorials