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

Dans cette procédure pas à pas, vous allez générer une application console qui exécute l’accès aux données de base d’une base de données Microsoft SQL Server à l’aide d’Entity Framework.In this walkthrough, you will build a console application that performs basic data access against a Microsoft SQL Server database 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

  • Ouvrir Visual StudioOpen Visual Studio

  • Fichier > Nouveau > Projet...File > New > Project...

  • Dans le menu de gauche, sélectionnez Modèles > Visual C# > Windows.From the left menu select Templates > Visual C# > Windows

  • Choisissez le modèle de projet Application console.Select the Console Application project template

  • Assurez-vous de bien cibler .NET Framework 4.5.1 ou une version ultérieure.Ensure you are targeting .NET Framework 4.5.1 or later

  • Nommez le projet et cliquez sur OK.Give the project a name and 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

Pour activer l’ingénierie à rebours à partir d’une base de données existante, vous devez également installer deux autres packages.To enable reverse engineering from an existing database we need to install a couple of other packages too.

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

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

Le processus d’ingénierie à rebours créé des classes d’entité et un contexte dérivé en fonction du schéma de la base de données existante.The reverse engineer process created entity classes and a derived context 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.ConsoleApp.ExistingDb
{
    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.

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;

namespace EFGetStarted.ConsoleApp.ExistingDb
{
    public partial class BloggingContext : DbContext
    {
        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;");
        }

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

        public virtual DbSet<Blog> Blog { get; set; }
        public virtual DbSet<Post> Post { get; set; }
    }
}

Utiliser le modèleUse your model

Vous pouvez à présent utiliser le modèle pour accéder aux données.You can now use your model to perform data access.

  • Ouvrez Program.cs.Open Program.cs

  • Remplacez le contenu du fichier par le code suivant.Replace the contents of the file with the following code

using System;

namespace EFGetStarted.ConsoleApp.ExistingDb
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var db = new BloggingContext())
            {
                db.Blog.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.Blog)
                {
                    Console.WriteLine(" - {0}", blog.Url);
                }
            }
        }
    }
}
  • Déboguer > Exécuter sans débogageDebug > Start Without Debugging

Vous verrez qu’un blog est enregistré dans la base de données et que les détails de tous les blogs s’affichent dans la console.You will see that one blog is saved to the database and then the details of all blogs are printed to the console.

image