Avant de commencer, il est nécessaire de préciser qu’Entity Framework Core a été conçu pour une approche Code First. De ce fait, tout ce que nous allons voir dans cet article et les suivants, est susceptible d’être modifié voire supprimé. Cependant, il peut arriver que l’on ait besoin, pour une raison ou une autre (base de données d’une appli existante, …), de faire du Database First avec EF Core.
Dans cette série d’articles EF Core Database First, nous allons aborder différentes thématiques autour du Database First avec Entity Framework Core, dont voici la liste :
- Visite guidée (cet article)
- Les outils en ligne de commande
- Personnaliser le code généré
- Quelques astuces utiles
Pour bien commencer
Afin de pouvoir essayer les commandes que nous allons voir dans les prochains articles, nous allons créer et utiliser un projet d’exemple : une petite boutique. L’idée est d’avoir une base de données simple pour une application web (MVC Core) l’utilisant.
Si vous souhaitez passer cette étape, vous pouvez récupérer la solution pour Visual Studio 2017 sur GitHub : https://github.com/adrenalinedj/efcoredbfirstexample.
Outils utilisés
Voici la liste des outils utilisés :
- VS 2017
- Cmd/Powershell ou Package Manager Console (VS 2017)
- .Net Core en version 2.1 téléchargeable ici : https://www.microsoft.com/net/download/dotnet-core/2.1
Création du projet
Après avoir ouvert VS 2017, créez un projet de type ASP.Net Core Web Application que l’on nommera EFCoreDBFirst.MyStore
. Dans l’étape suivante, sélectionnez Web Application (Model-View-Controller).
Vous devriez obtenir quelque chose comme ceci :
Création de la base de données
Pour la base de données, nous allons utiliser localDb
.
Pour cela, il suffit d’ouvrir la fenêtre Server Explorer
à partir du menu View
puis d’effectuer un clic-droit sur Data Connections
et de sélectionner Create new SQL Server Database...
.
Dans la nouvelle fenêtre, il suffit d’indiquer (localdb)\mssqllocaldb
dans le champ Server name
et EFCoreDBFirstMyStore
dans le champ New database name
puis de cliquer sur Ok
pour terminer.
Dans la fenêtre, il suffit de sélectionner Microsoft SQL Server
puis de cliquer sur Continue
.
Dans la fenêtre de connexion, il faut préciser le server name qui doit être (localdb)\mssqllocaldb
. Vous pouvez vérifier la connexion en cliquant sur Test Connection
et vous devriez obtenir le message suivant Test connection succeeded
. Sélectionnez master
puis Ok
pour terminer.
Vous devriez voir la nouvelle connexion appraitre comme ceci:
Maintenant, il faut effectuer un clic-droit sur la connexion, nouvellement créée, et sélectionner New Query
. Dans la fenêtre, il suffit de copier-coller le script SQL suivant et de l’exécuter pour que la base de données soit créée :
USE [EFCoreDBFirstMyStore]
GO
CREATE TABLE [dbo].[Category]
(
[Id] INT NOT NULL IDENTITY,
[Name] NVARCHAR(50) NOT NULL,
[Description] NVARCHAR(255) NULL,
CONSTRAINT [PK_Category] PRIMARY KEY ([Id])
);
GO
CREATE TABLE [dbo].[Product]
(
[Id] INT NOT NULL IDENTITY,
[CategoryId] INT NOT NULL,
[Name] NVARCHAR(128) NOT NULL,
[Description] NVARCHAR(MAX) NOT NULL,
[Price] DECIMAL(18, 3) NOT NULL,
[Stock] INT NOT NULL,
CONSTRAINT [PK_Product] PRIMARY KEY ([Id]),
CONSTRAINT [FK_Product_Category_Id] FOREIGN KEY ([CategoryId]) REFERENCES [dbo].[Category] ([Id])
);
GO
CREATE SCHEMA [stats]
GO
CREATE TABLE [stats].[ProductView]
(
[Id] INT NOT NULL IDENTITY,
[ProductId] INT NOT NULL,
[Views] INT NOT NULL,
CONSTRAINT [PK_ProductView] PRIMARY KEY ([Id]),
CONSTRAINT [FK_ProductView_Product_Id] FOREIGN KEY ([ProductId]) REFERENCES [dbo].[Product] ([Id])
);
GO
Cela va créer 2 tables dans le schéma dbo
pour les catégories et les produits de notre boutique exemple et 1 table dans le schéma stats
pour le nombre de vues des produits.