Database First

Cette vidéo et cette procédure pas à pas fournissent une introduction au développement Database First à l’aide d’Entity Framework. Database First vous permet de rétroconcevoir un modèle à partir d’une base de données existante. Le modèle est stocké dans un fichier EDMX (extension .edmx) et peut être consulté et modifié dans Entity Framework Designer. Les classes avec lesquelles vous interagissez dans votre application sont générées automatiquement à partir du fichier EDMX.

Regardez la vidéo

Cette vidéo fournit une introduction au développement Database First à l’aide d’Entity Framework. Database First vous permet de rétroconcevoir un modèle à partir d’une base de données existante. Le modèle est stocké dans un fichier EDMX (extension .edmx) et peut être consulté et modifié dans Entity Framework Designer. Les classes avec lesquelles vous interagissez dans votre application sont générées automatiquement à partir du fichier EDMX.

Présentée par : Rowan Miller

Vidéo : WMV | MP4 | WMV (ZIP)

Conditions préalables

Vous devez au moins avoir Visual Studio 2010 ou Visual Studio 2012 installés pour compléter ce guide.

Si vous utilisez Visual Studio 2010, vous devrez également installer NuGet.

 

1. Créer une base de données existante

Normalement, lorsque vous ciblez une base de données existante, elle est déjà créée, mais pour cette procédure pas à pas, nous devons créer une base de données pour y accéder.

Le serveur de base de données installé avec Visual Studio est différent selon la version de Visual Studio que vous avez installée :

  • Si vous utilisez Visual Studio 2010, vous allez créer une base de données SQL Express.
  • Si vous utilisez Visual Studio 2012, vous allez créer une base de données LocalDB.

 

Allons-y et générons la base de données.

  • Ouvrez Visual Studio.

  • Affichage -> Explorateur de serveurs

  • Cliquez avec le bouton droit sur Connexions de données -> Ajouter une connexion…

  • Si vous vous n’êtes pas connecté à une base de données à partir de l’Explorateur de serveurs avant de devoir sélectionner Microsoft SQL Server comme source de données

    Select Data Source

  • Connectez-vous à LocalDB ou SQL Express, en fonction de ce que vous avez installé, puis entrez DatabaseFirst.Blogging comme nom de base de données

    Sql Express Connection DF

    LocalDB Connection DF

  • Sélectionnez OK. Il vous est demandé si vous voulez créer une base de données, sélectionnez Oui

    Create Database Dialog

  • La nouvelle base de données s’affiche dans l’Explorateur de serveurs, cliquez dessus avec le bouton droit et sélectionnez Nouvelle requête

  • Copiez le code SQL suivant dans la nouvelle requête, cliquez avec le bouton droit sur la requête, puis sélectionnez Exécuter

CREATE TABLE [dbo].[Blogs] (
    [BlogId] INT IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (200) NULL,
    [Url]  NVARCHAR (200) NULL,
    CONSTRAINT [PK_dbo.Blogs] PRIMARY KEY CLUSTERED ([BlogId] ASC)
);

CREATE TABLE [dbo].[Posts] (
    [PostId] INT IDENTITY (1, 1) NOT NULL,
    [Title] NVARCHAR (200) NULL,
    [Content] NTEXT NULL,
    [BlogId] INT NOT NULL,
    CONSTRAINT [PK_dbo.Posts] PRIMARY KEY CLUSTERED ([PostId] ASC),
    CONSTRAINT [FK_dbo.Posts_dbo.Blogs_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [dbo].[Blogs] ([BlogId]) ON DELETE CASCADE
);

2. Création de l’application

Pour simplifier les choses, nous allons créer une application console de base qui utilise Database First pour l’accès aux données :

  • Ouvrez Visual Studio.
  • Fichier -> Nouveau -> Projet
  • Sélectionnez Windows dans le menu de gauche et Application console
  • Entrez DatabaseFirstSample comme nom
  • Sélectionnez OK.

 

3. Rétroconcevoir le modèle

Nous allons utiliser Entity Framework Designer, qui est compris dans Visual Studio, pour créer notre modèle.

  • Projet -> Ajouter un nouvel élément…

  • Sélectionnez Données dans le menu de gauche, puis ADO.NET Entity Data Model

  • Entrez BloggingModel comme nom, puis cliquez sur OK

  • Cette opération lance l’Assistant Entity Data Model

  • Sélectionnez Générer à partir de la base de données, puis cliquez sur Suivant

    Wizard Step 1

  • Sélectionnez la connexion à la base de données que vous avez créée dans la première section, entrez BloggingContext comme nom de la chaîne de connexion, puis cliquez sur Suivant

    Wizard Step 2

  • Cochez la case en regard de ‘Tables’ pour importer toutes les tables, puis cliquez sur ‘Terminer’

    Wizard Step 3

 

Une fois le processus de rétroconception terminé, le nouveau modèle est ajouté à votre projet et ouvert pour vous permettre de le voir dans Entity Framework Designer. Un fichier App.config a également été ajouté à votre projet avec les détails de connexion de la base de données.

Model Initial

Étapes supplémentaires dans Visual Studio 2010

Si vous travaillez dans Visual Studio 2010, vous devez suivre certaines étapes supplémentaires pour effectuer une mise à niveau vers la dernière version d’Entity Framework. La mise à niveau est importante, car elle vous donne accès à une surface d’API améliorée, qui est beaucoup plus facile à utiliser, ainsi qu’aux derniers correctifs de bogues.

Tout d’abord, nous devons obtenir la dernière version d’Entity Framework à partir de NuGet.

  • Projet -> Gérer les packages NuGet...Si vous n’avez pas l’option Gérer les packages NuGet... vous devez installer la dernière version de NuGet
  • Sélectionnez l’onglet En ligne
  • Sélectionnez le package EntityFramework
  • Cliquez sur Install.

Ensuite, nous devons échanger notre modèle pour générer du code qui utilise l’API DbContext, qui a été introduite dans les dernières versions d’Entity Framework.

  • Cliquez avec le bouton droit sur un emplacement vide de votre modèle dans EF Designer, puis sélectionnez Ajouter un élément de génération de code...

  • Sélectionnez Modèles en ligne dans le menu de gauche et recherchez DbContext

  • Sélectionnez le Générateur DbContext EF 5.x pour C#, entrez BloggingModel comme nom, puis cliquez sur Ajouter

    DbContext Template

 

4. Lecture et écriture de données

Maintenant que nous avons un modèle, il est temps de l’utiliser pour accéder à certaines données. Les classes que nous allons utiliser pour accéder aux données sont générées automatiquement pour vous en fonction du fichier EDMX.

Cette capture d’écran a été prise dans Visual Studio 2012. Si vous utilisez Visual Studio 2010, les fichiers BloggingModel.tt et BloggingModel.Context.tt sont directement sous votre projet, et non imbriqués sous le fichier EDMX.

Generated Classes DF

 

Implémentez la méthode Main dans Program.cs, comme indiqué ci-dessous. Ce code crée une instance de notre contexte, puis l’utilise pour insérer un nouveau Blog. Il utilise ensuite une requête LINQ pour récupérer tous les Blogs de la base de données classées par titre en ordre alphabétique.

class Program
{
    static void Main(string[] args)
    {
        using (var db = new BloggingContext())
        {
            // Create and save a new Blog
            Console.Write("Enter a name for a new Blog: ");
            var name = Console.ReadLine();

            var blog = new Blog { Name = name };
            db.Blogs.Add(blog);
            db.SaveChanges();

            // Display all Blogs from the database
            var query = from b in db.Blogs
                        orderby b.Name
                        select b;

            Console.WriteLine("All blogs in the database:");
            foreach (var item in query)
            {
                Console.WriteLine(item.Name);
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
}

Vous pouvez maintenant exécuter l’application et la tester.

Enter a name for a new Blog: ADO.NET Blog
All blogs in the database:
ADO.NET Blog
Press any key to exit...

 

5. Gestion des changements dans la base de données

Maintenant, il est temps d’apporter des changements à notre schéma de base de données. Lorsque nous le faisons, nous devons également mettre à jour notre modèle pour refléter ces changements.

La première étape consiste à apporter des changements au schéma de base de données. Nous allons ajouter une table Users au schéma.

  • Cliquez avec le bouton droit sur la base de données DatabaseFirst.Blogging dans l’Explorateur de serveurs et sélectionnez Nouvelle requête
  • Copiez le code SQL suivant dans la nouvelle requête, cliquez avec le bouton droit sur la requête, puis sélectionnez Exécuter
CREATE TABLE [dbo].[Users]
(
    [Username] NVARCHAR(50) NOT NULL PRIMARY KEY,  
    [DisplayName] NVARCHAR(MAX) NULL
)

Maintenant que le schéma est mis à jour, il est temps de mettre à jour le modèle avec ces changements.

  • Cliquez avec le bouton droit sur un emplacement vide de votre modèle dans EF Designer et sélectionnez « Mettre à jour le modèle à partir de la base de données… », ce qui lance l’Assistant Mise à jour

  • Sous l’onglet Ajouter de l’Assistant Mise à jour, cochez la case en regard de Tables, ce qui indique que nous voulons ajouter de nouvelles tables à partir du schéma. L’onglet Actualiser affiche les tables existantes dans le modèle, dans lesquelles les changements seront recherchés pendant la mise à jour. L’onglet Supprimer affiche les tables qui ont été supprimées du schéma et qui seront également supprimées du modèle dans le cadre de la mise à jour. Les informations sous ces deux onglets sont automatiquement détectées et fournies à titre indicatif uniquement, vous ne pouvez pas changer les paramètres.

    Refresh Wizard

  • Cliquez sur Terminer dans l’Assistant Mise à jour

 

Le modèle est maintenant mis à jour et inclut une nouvelle entité User qui est mappée à la table Users que nous avons ajoutée à la base de données.

Model Updated

Résumé

Dans cette procédure pas à pas, nous avons étudié le développement Database First, qui nous a permis de créer un modèle dans EF Designer sur une base de données existante. Nous avons ensuite utilisé le modèle pour lire et écrire des données à partir de la base de données. Enfin, nous avons mis à jour le modèle pour refléter les changements apportés au schéma de base de données.