Bien démarrer avec EF Core sur ASP.NET Core avec une base de données existanteGetting Started with EF Core on ASP.NET Core with an Existing Database

Dans cette procédure pas à pas, vous allez générer une application ASP.NET Core MVC exécutant l’accès aux données de base à l’aide d’Entity Framework.In this walkthrough, you will build an ASP.NET Core MVC application that performs basic data access using Entity Framework. Vous allez utiliser l’ingénierie à rebours pour créer un modèle Entity Framework à partir d’une base de données existante.You will use reverse engineering to create an Entity Framework model based on an existing database.

Conseil

Vous pouvez afficher cet exemple sur GitHub.You can view this article's sample on GitHub.

PrérequisPrerequisites

Pour effectuer cette procédure pas à pas, vous devez satisfaire les prérequis suivants :The following prerequisites are needed to complete this walkthrough:

Base de données de création de blogsBlogging database

Ce didacticiel utilise une base de données de création de blogs sur votre instance LocalDb en tant que base de données existante.This tutorial uses a Blogging database on your LocalDb instance as the existing database.

Conseil

Si vous avez déjà créé la base de données de création de blogs dans le cadre d’un autre didacticiel, vous pouvez ignorer ces étapes.If you have already created the Blogging database as part of another tutorial, you can skip these steps.

  • Ouvrir Visual StudioOpen Visual Studio
  • Outils -> Connexion à une base de données...Tools -> Connect to Database...
  • Sélectionnez Microsoft SQL Server et cliquez sur Continuer.Select Microsoft SQL Server and click Continue
  • Entrez (localdb)\mssqllocaldb comme nom du serveur.Enter (localdb)\mssqllocaldb as the Server Name
  • Entrez master comme nom de la base de données et cliquez sur OK.Enter master as the Database Name and click OK
  • La base de données master figure désormais sous Connexions de données dans l’Explorateur de serveurs.The master database is now displayed under Data Connections in Server Explorer
  • Cliquez avec le bouton de droite sur la base de données dans l’Explorateur de serveurs et sélectionnez l’option Nouvelle requête.Right-click on the database in Server Explorer and select New Query
  • Copiez le script ci-dessous dans l’éditeur de requêtes.Copy the script, listed below, into the query editor
  • Cliquez avec le bouton de droite sur l’éditeur de requêtes et sélectionnez l’option Exécuter.Right-click on the query editor and select Execute
CREATE DATABASE [Blogging];
GO

USE [Blogging];
GO

CREATE TABLE [Blog] (
    [BlogId] int NOT NULL IDENTITY,
    [Url] nvarchar(max) NOT NULL,
    CONSTRAINT [PK_Blog] PRIMARY KEY ([BlogId])
);
GO

CREATE TABLE [Post] (
    [PostId] int NOT NULL IDENTITY,
    [BlogId] int NOT NULL,
    [Content] nvarchar(max),
    [Title] nvarchar(max),
    CONSTRAINT [PK_Post] PRIMARY KEY ([PostId]),
    CONSTRAINT [FK_Post_Blog_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [Blog] ([BlogId]) ON DELETE CASCADE
);
GO

INSERT INTO [Blog] (Url) VALUES
('http://blogs.msdn.com/dotnet'),
('http://blogs.msdn.com/webdev'),
('http://blogs.msdn.com/visualstudio')
GO

Créer un projetCreate a new project

  • Ouvrez Visual Studio 2017.Open Visual Studio 2017
  • Fichier > Nouveau > Projet...File -> New -> Project...
  • Dans le menu de gauche, sélectionnez Installé > Modèles > Visual C# > Web.From the left menu select Installed -> Templates -> Visual C# -> Web
  • Sélectionnez le modèle de projet Application web ASP.NET Core (.NET Core).Select the ASP.NET Core Web Application (.NET Core) project template
  • Entrez le nom EFGetStarted.AspNetCore.ExistingDb et cliquez sur OK.Enter EFGetStarted.AspNetCore.ExistingDb as the name and click OK
  • Patientez jusqu’à l’affichage de la boîte de dialogue Nouvelle application web ASP.NET Core.Wait for the New ASP.NET Core Web Application dialog to appear
  • Dans la liste de modèles ASP.NET Core 2.0, sélectionnez le modèle de projet Application web (Model-View-Controller).Under ASP.NET Core Templates 2.0 select the Web Application (Model-View-Controller)
  • Vérifiez que le paramètre Authentification est défini sur Aucune authentification.Ensure that Authentication is set to No Authentication
  • Cliquez sur OK.Click OK

Installer Entity FrameworkInstall Entity Framework

Pour utiliser EF Core, installez le package pour le ou les fournisseurs de bases de données à cibler.To use EF Core, install the package for the database provider(s) you want to target. Cette procédure pas à pas utilise SQL Server.This walkthrough uses SQL Server. Pour obtenir la liste des fournisseurs disponibles, consultez Fournisseurs de bases de données.For a list of available providers see Database Providers.

  • Outils > Gestionnaire de package NuGet > Console du Gestionnaire de packageTools > NuGet Package Manager > Package Manager Console

  • Exécutez Install-Package Microsoft.EntityFrameworkCore.SqlServer.Run Install-Package Microsoft.EntityFrameworkCore.SqlServer

Nous utiliserons des outils Entity Framework pour créer un modèle à partir de la base de données.We will be using some Entity Framework Tools to create a model from the database. Nous installerons donc également le package d’outils :So we will install the tools package as well:

  • Exécutez Install-Package Microsoft.EntityFrameworkCore.Tools.Run Install-Package Microsoft.EntityFrameworkCore.Tools

Nous utiliserons des outils de génération de modèles automatique ASP.NET Core pour créer par la suite des contrôleurs et des vues.We will be using some ASP.NET Core Scaffolding tools to create controllers and views later on. Nous installerons donc également ce package de conception :So we will install this design package as well:

  • Exécutez Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design.Run Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design

Rétroconcevoir le modèleReverse engineer your model

Créons à présent le modèle EF à partir de votre base de données existante.Now it's time to create the EF model based on your existing database.

  • Outils –> Gestionnaire de package NuGet –> Console du Gestionnaire de packageTools –> NuGet Package Manager –> Package Manager Console
  • Exécutez la commande suivante pour créer un modèle à partir de la base de données existante :Run the following command to create a model from the existing database:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

Si vous recevez l’erreur The term 'Scaffold-DbContext' is not recognized as the name of a cmdlet, fermez et rouvrez Visual Studio.If you receive an error stating The term 'Scaffold-DbContext' is not recognized as the name of a cmdlet, then close and reopen Visual Studio.

Conseil

Vous pouvez spécifier les tables pour lesquelles générer des entités en ajoutant l’argument -Tables à la commande ci-dessus.You can specify which tables you want to generate entities for by adding the -Tables argument to the command above. Par exemple,E.g. -Tables Blog,Post.-Tables Blog,Post.

Le processus d’ingénierie à rebours créé des classes d’entité (Blog.cs & Post.cs) et un contexte dérivé (BloggingContext.cs) en fonction du schéma de la base de données existante.The reverse engineer process created entity classes (Blog.cs & Post.cs) and a derived context (BloggingContext.cs) based on the schema of the existing database.

Les classes d’entité sont des objets C# simples qui représentent les données que vous allez interroger et enregistrer.The entity classes are simple C# objects that represent the data you will be querying and saving.

using System;
using System.Collections.Generic;

namespace EFGetStarted.AspNetCore.ExistingDb.Models
{
    public partial class Blog
    {
        public Blog()
        {
            Post = new HashSet<Post>();
        }

        public int BlogId { get; set; }
        public string Url { get; set; }

        public virtual ICollection<Post> Post { get; set; }
    }
}

Le contexte représente une session avec la base de données et vous permet d’interroger et d’enregistrer les instances des classes d’entité.The context represents a session with the database and allows you to query and save instances of the entity classes.

public partial class BloggingContext : DbContext
{
   public virtual DbSet<Blog> Blog { get; set; }
   public virtual DbSet<Post> Post { get; set; }

   protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
   {
       if (!optionsBuilder.IsConfigured)
       {
           #warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.
           optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;");
       }
   }

   protected override void OnModelCreating(ModelBuilder modelBuilder)
   {
       modelBuilder.Entity<Blog>(entity =>
       {
           entity.Property(e => e.Url).IsRequired();
       });

       modelBuilder.Entity<Post>(entity =>
       {
           entity.HasOne(d => d.Blog)
               .WithMany(p => p.Post)
               .HasForeignKey(d => d.BlogId);
       });
   }
}

Inscrire le contexte avec l’injection de dépendancesRegister your context with dependency injection

Le concept d’injection de dépendances est essentiel dans ASP.NET Core.The concept of dependency injection is central to ASP.NET Core. Des services (tels que BloggingContext) sont inscrits avec l’injection de dépendances au démarrage de l’application.Services (such as BloggingContext) are registered with dependency injection during application startup. Ces services sont affectés aux composants qui les nécessitent (par exemple, vos contrôleurs MVC) par le biais des propriétés ou paramètres du constructeur.Components that require these services (such as your MVC controllers) are then provided these services via constructor parameters or properties. Pour plus d’informations sur l’injection de dépendances, consultez l’article Injection de dépendances sur le site ASP.NET.For more information on dependency injection see the Dependency Injection article on the ASP.NET site.

Supprimer la configuration contextuelle inlineRemove inline context configuration

Dans ASP.NET Core, la configuration s’effectue généralement dans Startup.cs.In ASP.NET Core, configuration is generally performed in Startup.cs. Pour respecter ce modèle, nous allons transférer la configuration du fournisseur de base de données dans Startup.cs.To conform to this pattern, we will move configuration of the database provider to Startup.cs.

  • Ouvrez Models\BloggingContext.cs.Open Models\BloggingContext.cs
  • Supprimez la méthode OnConfiguring(...).Delete the OnConfiguring(...) method
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    #warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.
    optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;");
}
  • Ajoutez le constructeur suivant pour pouvoir transférer la configuration dans le contexte par injection de dépendances.Add the following constructor, which will allow configuration to be passed into the context by dependency injection
public BloggingContext(DbContextOptions<BloggingContext> options)
    : base(options)
{ }

Inscrire et configurer le contexte dans Startup.csRegister and configure your context in Startup.cs

Afin de permettre à nos contrôleurs MVC d’utiliser BloggingContext, nous allons inscrire ce dernier en tant que service.In order for our MVC controllers to make use of BloggingContext we are going to register it as a service.

  • Ouvrez Startup.cs.Open Startup.cs
  • Ajoutez les instructions using suivantes au début du fichier.Add the following using statements at the start of the file
using EFGetStarted.AspNetCore.ExistingDb.Models;
using Microsoft.EntityFrameworkCore;

Nous pouvons à présent utiliser la méthode AddDbContext(...) pour l’inscrire en tant que service.Now we can use the AddDbContext(...) method to register it as a service.

  • Localisez la méthode ConfigureServices(...).Locate the ConfigureServices(...) method
  • Ajoutez le code suivant pour inscrire le contexte en tant que service.Add the following code to register the context as a service
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    var connection = @"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0";
    services.AddDbContext<BloggingContext>(options => options.UseSqlServer(connection));
}

Conseil

Dans une application réelle, vous placeriez généralement la chaîne de connexion dans un fichier de configuration.In a real application you would typically put the connection string in a configuration file. Par souci de simplicité, nous allons la définir dans le code.For the sake of simplicity, we are defining it in code. Pour plus d’informations, consultez Chaînes de connexion.For more information, see Connection Strings.

Créer un contrôleurCreate a controller

Nous allons à présent activer la génération de modèles automatique dans notre projet.Next, we'll enable scaffolding in our project.

  • Dans l’Explorateur de solutions, cliquez avec le bouton de droite sur le dossier Contrôleurs et sélectionnez Ajouter -> Contrôleur...Right-click on the Controllers folder in Solution Explorer and select Add -> Controller...
  • Sélectionnez Dépendances complètes et cliquez sur Ajouter.Select Full Dependencies and click Add
  • Vous pouvez ignorer les instructions du fichier ScaffoldingReadMe.txt qui s’ouvre.You can ignore the instructions in the ScaffoldingReadMe.txt file that opens

Une fois activée la génération de modèles automatique, nous pouvons générer automatiquement un modèle de contrôleur pour l’entité Blog.Now that scaffolding is enabled, we can scaffold a controller for the Blog entity.

  • Dans l’Explorateur de solutions, cliquez avec le bouton de droite sur le dossier Contrôleurs et sélectionnez Ajouter -> Contrôleur...Right-click on the Controllers folder in Solution Explorer and select Add -> Controller...
  • Sélectionnez Contrôleur MVC avec vues, utilisant Entity Framework et cliquez sur OK.Select MVC Controller with views, using Entity Framework and click Ok
  • Définissez les paramètres Classe de modèle sur Blog et Classe de contexte de données sur BloggingContext.Set Model class to Blog and Data context class to BloggingContext
  • Cliquez sur Ajouter.Click Add

Exécuter l'applicationRun the application

Vous pouvez à présent exécuter l’application pour la voir en action.You can now run the application to see it in action.

  • Déboguer -> Exécuter sans débogageDebug -> Start Without Debugging
  • L’application est générée et s’ouvre dans un navigateur web.The application will build and open in a web browser
  • Accédez à /Blogs.Navigate to /Blogs
  • Cliquez sur Créer nouveau.Click Create New
  • Entrez l’URL du nouveau blog et cliquez sur Créer.Enter a Url for the new blog and click Create

image

image