Partager via


Prise en main avec Entity Framework 4.0 Database First et ASP.NET 4 Web Forms

par Tom Dykstra

L’exemple d’application web Contoso University montre comment créer des applications ASP.NET Web Forms à l’aide d’Entity Framework 4.0 et de Visual Studio 2010. L’exemple d’application est un site web pour une université Contoso fictive. Il comprend des fonctionnalités telles que l’admission des étudiants, la création des cours et les affectations des formateurs.

Le tutoriel présente des exemples en C#. L’exemple téléchargeable contient du code en C# et en Visual Basic.

Base de données d’abord

Il existe trois façons d’utiliser des données dans Entity Framework : Base de données d’abord, Modèle d’abord et Code First. Ce tutoriel concerne la base de données d’abord. Pour plus d’informations sur les différences entre ces flux de travail et pour obtenir des conseils sur la façon de choisir le meilleur pour votre scénario, consultez Flux de travail de développement Entity Framework.

Web Forms

Cette série de tutoriels utilise le modèle ASP.NET Web Forms et suppose que vous savez comment utiliser ASP.NET Web Forms dans Visual Studio. Si ce n’est pas le cas, consultez Prise en main avec ASP.NET Web Forms 4.5. Si vous préférez utiliser l’infrastructure MVC ASP.NET, consultez Prise en main avec Entity Framework à l’aide de ASP.NET MVC.

Versions des logiciels

Illustré dans le tutoriel Fonctionne également avec
Windows 7 Windows 8
Visual Studio 2010 Visual Studio 2010 Express pour le web. Le didacticiel n’a pas été testé avec les versions ultérieures de Visual Studio. Il existe de nombreuses différences dans les sélections de menus, les boîtes de dialogue et les modèles.
.NET 4 .NET 4.5 est rétrocompatible avec .NET 4, mais le tutoriel n’a pas été testé avec .NET 4.5.
Entity Framework 4 Le didacticiel n’a pas été testé avec les versions ultérieures d’Entity Framework. À compter d’Entity Framework 5, EF utilise par défaut le DbContext API qui a été introduit avec EF 4.1. Le contrôle EntityDataSource a été conçu pour utiliser l’API ObjectContext . Pour plus d’informations sur l’utilisation du contrôle EntityDataSource avec l’API DbContext , consultez ce billet de blog.

Questions

Si vous avez des questions qui ne sont pas directement liées au tutoriel, vous pouvez les publier sur le forum ASP.NET Entity Framework, le forum Entity Framework et LINQ to Entities ou StackOverflow.com.

Vue d’ensemble

L’application que vous allez créer dans ces tutoriels est un simple site web universitaire.

Capture d’écran de la page d’accueil de Contoso University, qui montre des liens vers les pages Accueil, À propos, Étudiants, Cours, Instructeurs et Services.

Les utilisateurs peuvent afficher et mettre à jour les informations relatives aux étudiants, aux cours et aux formateurs. Voici quelques-uns des écrans que vous allez créer.

Image30

Image37

Image31

Image32

Création de l’application web

Pour démarrer le didacticiel, ouvrez Visual Studio, puis créez un projet d’application web ASP.NET à l’aide du modèle d’application web ASP.NET :

Image01

Ce modèle crée un projet d’application web qui comprend déjà une feuille de style et master pages :

Image02

Ouvrez le fichier Site.Master et remplacez « Mon application ASP.NET » par « Contoso University ».

<h1>
    Contoso University
</h1>

Recherchez le contrôle Menu nommé NavigationMenu et remplacez-le par le balisage suivant, qui ajoute des éléments de menu pour les pages que vous allez créer.

<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false"
                    IncludeStyleBlock="false" Orientation="Horizontal">
                    <Items>
                        <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home" />
                        <asp:MenuItem NavigateUrl="~/About.aspx" Text="About" />
                        <asp:MenuItem NavigateUrl="~/Students.aspx" Text="Students">
                            <asp:MenuItem NavigateUrl="~/StudentsAdd.aspx" Text="Add Students" />
                        </asp:MenuItem>
                        <asp:MenuItem NavigateUrl="~/Courses.aspx" Text="Courses">
                            <asp:MenuItem NavigateUrl="~/CoursesAdd.aspx" Text="Add Courses" />
                        </asp:MenuItem>
                        <asp:MenuItem NavigateUrl="~/Instructors.aspx" Text="Instructors">
                            <asp:MenuItem NavigateUrl="~/InstructorsCourses.aspx" Text="Course Assignments" />
                            <asp:MenuItem NavigateUrl="~/OfficeAssignments.aspx" Text="Office Assignments" />
                        </asp:MenuItem>
                        <asp:MenuItem NavigateUrl="~/Departments.aspx" Text="Departments">
                            <asp:MenuItem NavigateUrl="~/DepartmentsAdd.aspx" Text="Add Departments" />
                        </asp:MenuItem>
                    </Items>
                </asp:Menu>

Ouvrez la page Default.aspx et modifiez le Content contrôle nommé BodyContent comme suit :

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>
        Welcome to Contoso University!
   </h2>
</asp:Content>

Vous disposez maintenant d’une page d’accueil simple avec des liens vers les différentes pages que vous allez créer :

Capture d’écran de la page d’accueil de Contoso University, qui montre des liens vers les pages Accueil, À propos, Étudiants, Cours, Instructeurs et Services.

Création de la base de données

Pour ces tutoriels, vous allez utiliser le concepteur de modèle de données Entity Framework pour créer automatiquement le modèle de données basé sur une base de données existante (souvent appelée approche base de données d’abord ). Une autre solution qui n’est pas abordée dans cette série de tutoriels consiste à créer manuellement le modèle de données, puis à faire en charge au concepteur de générer des scripts qui créent la base de données (approche model-first ).

Pour la méthode database-first utilisée dans ce didacticiel, l’étape suivante consiste à ajouter une base de données au site. Le moyen le plus simple consiste à d’abord télécharger le projet associé à ce tutoriel. Cliquez ensuite avec le bouton droit sur le dossier App_Data , sélectionnez Ajouter un élément existant, puis sélectionnez le fichier de base de données School.mdf dans le projet téléchargé.

Vous pouvez également suivre les instructions fournies dans Création de l’exemple de base de données scolaire. Que vous téléchargez la base de données ou la créez, copiez le fichier School.mdf du dossier suivant dans le dossier App_Data de votre application :

%PROGRAMFILES%\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA

(Cet emplacement du fichier .mdf suppose que vous utilisez SQL Server 2008 Express.)

Si vous créez la base de données à partir d’un script, effectuez les étapes suivantes pour créer un diagramme de base de données :

  1. Dans Server Explorer, développez Connexions de données, School.mdf, cliquez avec le bouton droit sur Diagrammes de base de données, puis sélectionnez Ajouter un nouveau diagramme.

    Image35

  2. Sélectionnez toutes les tables, puis cliquez sur Ajouter.

    Image36

    SQL Server crée un diagramme de base de données qui montre les tables, les colonnes des tables et les relations entre les tables. Vous pouvez déplacer les tables pour les organiser comme vous le souhaitez.

  3. Enregistrez le diagramme en tant que « SchoolDiagram » et fermez-le.

Si vous téléchargez le fichier School.mdf associé à ce didacticiel, vous pouvez afficher le diagramme de base de données en double-cliquant sur SchoolDiagram sous Diagrammes de base de données dans server Explorer.

Image38

Le diagramme ressemble à ceci (les tables peuvent se trouver à des emplacements différents de ce qui est illustré ici) :

Image04

Création du modèle de données Entity Framework

Vous pouvez maintenant créer un modèle de données Entity Framework à partir de cette base de données. Vous pouvez créer le modèle de données dans le dossier racine de l’application, mais pour ce tutoriel, vous allez le placer dans un dossier nommé DAL (pour Data Access Layer).

Dans Explorateur de solutions, ajoutez un dossier de projet nommé DAL (vérifiez qu’il se trouve sous le projet, pas sous la solution).

Cliquez avec le bouton droit sur le dossier DAL , puis sélectionnez Ajouter et Nouvel élément. Sous Modèles installés, sélectionnez Données, sélectionnez l’ADO.NET modèle Entity Data Model , nommez-le SchoolModel.edmx, puis cliquez sur Ajouter.

Image05

Cela démarre l’Assistant Modèle de données d’entité. À la première étape de l’Assistant, l’option Générer à partir de la base de données est sélectionnée par défaut. Cliquez sur Suivant.

Image06

À l’étape Choisir votre connexion de données , conservez les valeurs par défaut, puis cliquez sur Suivant. La base de données School est sélectionnée par défaut et le paramètre de connexion est enregistré dans le fichier Web.config en tant que SchoolEntities.

Image07

À l’étape de l’Assistant Choisir vos objets de base de données , sélectionnez toutes les tables à l’exception sysdiagrams de (qui a été créée pour le diagramme que vous avez généré précédemment), puis cliquez sur Terminer.

Image08

Une fois le modèle créé, Visual Studio affiche une représentation graphique des objets Entity Framework (entités) qui correspondent à vos tables de base de données. (Comme pour le diagramme de base de données, l’emplacement des éléments individuels peut être différent de ce que vous voyez dans cette illustration. Vous pouvez faire glisser les éléments pour qu’ils correspondent à l’illustration si vous le souhaitez.)

Image09

Exploration du modèle de données Entity Framework

Vous pouvez voir que le diagramme d’entités ressemble beaucoup au diagramme de base de données, avec quelques différences. Une différence est l’ajout de symboles à la fin de chaque association qui indiquent le type d’association (les relations de table sont appelées associations d’entités dans le modèle de données) :

  • Une association un-à-zéro-ou-un est représentée par « 1 » et « 0..1 ».

    Image39

    Dans ce cas, une Person entité peut être associée ou non à une OfficeAssignment entité. Une OfficeAssignment entité doit être associée à une Person entité. En d’autres termes, un instructeur peut ou non être affecté à un bureau, et n’importe quel bureau ne peut être affecté qu’à un seul instructeur.

  • Une association un-à-plusieurs est représentée par « 1 » et « * ».

    Image40

    Dans ce cas, une Person entité peut avoir ou non des entités associées StudentGrade . Une StudentGrade entité doit être associée à une Person entité. StudentGrade les entités représentent en fait des cours inscrits dans cette base de données ; si un étudiant est inscrit à un cours et qu’il n’y a pas encore de note, la Grade propriété est null. En d’autres termes, un étudiant ne peut pas encore être inscrit à des cours, peut être inscrit à un cours ou être inscrit à plusieurs cours. Chaque note d’un cours inscrit s’applique à un seul étudiant.

  • Une association plusieurs-à-plusieurs est représentée par « * » et « * ».

    Image41

    Dans ce cas, une Person entité peut avoir ou non des entités associées Course , et l’inverse est également vrai : une Course entité peut ou non avoir des entités associées Person . En d’autres termes, un instructeur peut enseigner plusieurs cours, et un cours peut être enseigné par plusieurs instructeurs. (Dans cette base de données, cette relation s’applique uniquement aux instructeurs; elle ne lie pas les étudiants aux cours. Les étudiants sont liés aux cours par la table StudentGrades.)

Une autre différence entre le diagramme de base de données et le modèle de données est la section Propriétés de navigation supplémentaire pour chaque entité. Une propriété de navigation d’une entité fait référence à des entités associées. Par exemple, la Courses propriété dans une Person entité contient une collection de toutes les Course entités associées à cette Person entité.

Image12

Une autre différence entre la base de données et le modèle de données est l’absence de la CourseInstructor table d’association utilisée dans la base de données pour lier les Person tables et Course dans une relation plusieurs-à-plusieurs. Les propriétés de navigation vous permettent d’obtenir des entités associées Course à partir de l’entité Person et des entités associées Person à partir de l’entité Course . Il n’est donc pas nécessaire de représenter la table d’association dans le modèle de données.

Image11

Dans le cadre de ce didacticiel, supposons que la FirstName colonne de la Person table contienne en fait le prénom et le deuxième prénom d’une personne. Vous souhaitez modifier le nom du champ pour refléter cela, mais l’administrateur de base de données (DBA) peut ne pas vouloir modifier la base de données. Vous pouvez modifier le nom de la FirstName propriété dans le modèle de données, tout en laissant son équivalent de base de données inchangé.

Dans le concepteur, cliquez avec le bouton droit sur FirstName dans l’entité Person , puis sélectionnez Renommer.

Image13

Tapez le nouveau nom « FirstMidName ». Cela modifie la façon dont vous faites référence à la colonne dans le code sans modifier la base de données.

Image29

L’explorateur de modèles offre une autre façon d’afficher la structure de la base de données, la structure du modèle de données et le mappage entre elles. Pour l’afficher, cliquez avec le bouton droit sur une zone vide dans le concepteur d’entités, puis cliquez sur Explorateur de modèles.

Image18

Le volet Explorateur de modèles affiche une arborescence. (Le volet Explorateur de modèles peut être ancré avec le volet Explorateur de solutions.) Le nœud SchoolModel représente la structure du modèle de données, et le nœud SchoolModel.Store représente la structure de la base de données.

Image26

Développez SchoolModel.Store pour afficher les tables, développez Tables /Vues pour afficher les tables, puis développez Cours pour afficher les colonnes d’une table.

Image19

Développez SchoolModel, développez Types d’entités, puis développez le nœud Cours pour afficher les entités et les propriétés au sein des entités.

Image20

Dans le volet concepteur ou Explorateur de modèles, vous pouvez voir comment Entity Framework lie les objets des deux modèles. Cliquez avec le bouton droit sur l’entité Person et sélectionnez Mappage de table.

Image21

La fenêtre Détails du mappage s’ouvre. Notez que cette fenêtre vous permet de voir que la colonne FirstName de base de données est mappée à FirstMidName, ce que vous avez renommé dans le modèle de données.

Image22

Entity Framework utilise xml pour stocker des informations sur la base de données, le modèle de données et les mappages entre eux. Le fichier SchoolModel.edmx est en fait un fichier XML qui contient ces informations. Le concepteur affiche les informations dans un format graphique, mais vous pouvez également afficher le fichier au format XML en cliquant avec le bouton droit sur le fichier .edmx dans Explorateur de solutions, en cliquant sur Ouvrir avec, puis en sélectionnant Éditeur XML (Texte). (Le concepteur de modèle de données et un éditeur XML ne sont que deux façons différentes d’ouvrir et d’utiliser le même fichier. Vous ne pouvez donc pas faire en sorte que le concepteur ouvre et ouvre le fichier dans un éditeur XML en même temps.)

Vous avez maintenant créé un site web, une base de données et un modèle de données. Dans la procédure pas à pas suivante, vous allez commencer à utiliser des données à l’aide du modèle de données et du contrôle ASP.NET EntityDataSource .