Tutoriel : Prise en main d’Entity Framework 6 Code First à l’aide de MVC 5

Notes

Pour le nouveau développement, nous vous recommandons de ASP.NET Core Pages Razor sur ASP.NET contrôleurs et vues MVC. Pour obtenir une série de tutoriels similaire à celle-ci utilisant Razor Pages, consultez Tutoriel : Prise en main des pages Razor dans ASP.NET Core. Nouveau tutoriel :

  • est plus facile à suivre ;
  • Fournit d’autres bonnes pratiques sur EF Core.
  • Utilise des requêtes plus efficaces.
  • Est plus à jour avec la dernière API.
  • couvre davantage de fonctionnalités ;
  • représente la meilleure approche pour le développement de nouvelles applications.

Dans cette série de tutoriels, vous allez apprendre à créer une application MVC 5 ASP.NET qui utilise Entity Framework 6 pour l’accès aux données. Ce tutoriel utilise le workflow Code First. Pour plus d’informations sur la façon de choisir entre Code First, Database First et Model First, consultez Créer un modèle.

Cette série de tutoriels explique comment générer l’exemple d’application Contoso University. L’exemple d’application est un site web universitaire simple. Avec elle, vous pouvez afficher et mettre à jour les informations sur les étudiants, les cours et les instructeurs. Voici deux des écrans que vous créez :

Students_Index_page

Modifier l’étudiant

Dans ce tutoriel, vous allez :

  • Créer une application web MVC
  • Configurer le style du site
  • Installer Entity Framework 6
  • Créer le modèle de données
  • Créer le contexte de base de données
  • Initialiser la base de données avec des données de test
  • Configurer EF 6 pour utiliser LocalDB
  • Créer un contrôleur et des vues
  • Afficher la base de données

Prérequis

Créer une application web MVC

  1. Ouvrez Visual Studio et créez un projet web C# à l’aide du modèle application web ASP.NET (.NET Framework). Nommez le projet ContosoUniversity et sélectionnez OK.

    Boîte de dialogue Nouveau projet dans Visual Studio

  2. Dans Nouvelle application web ASP.NET - ContosoUniversity, sélectionnez MVC.

    Boîte de dialogue Nouvelle application web dans Visual Studio

    Notes

    Par défaut, l’option Authentification est définie sur Aucune authentification. Pour ce didacticiel, l’application web n’exige pas que les utilisateurs se connectent. En outre, il ne restreint pas l’accès en fonction de qui est connecté.

  3. Sélectionnez OK pour créer le projet.

Configurer le style du site

Quelques changements simples configureront le menu, la disposition et la page d’accueil du site.

  1. Ouvrez Views\Shared\_Layout.cshtml et apportez les modifications suivantes :

    • Remplacez chaque occurrence de « Mon application ASP.NET » et « Nom de l’application » par « Contoso University ».
    • Ajoutez des entrées de menu pour Les étudiants, les cours, les instructeurs et les services, puis supprimez l’entrée Contact.

    Les modifications sont mises en évidence dans l’extrait de code suivant :

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>@ViewBag.Title - Contoso University</title>
        @Styles.Render("~/Content/css")
        @Scripts.Render("~/bundles/modernizr")
    </head>
    <body>
        <div class="navbar navbar-inverse navbar-fixed-top">
            <div class="navbar-inner">
                <div class="container">
                    <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    @Html.ActionLink("Contoso University", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
                    <div class="nav-collapse collapse">
                        <ul class="nav">
                            <li>@Html.ActionLink("Home", "Index", "Home")</li>
                            <li>@Html.ActionLink("About", "About", "Home")</li>
                            <li>@Html.ActionLink("Students", "Index", "Student")</li>
                            <li>@Html.ActionLink("Courses", "Index", "Course")</li>
                            <li>@Html.ActionLink("Instructors", "Index", "Instructor")</li>
                            <li>@Html.ActionLink("Departments", "Index", "Department")</li>
                        </ul>
                    </div>
                </div>
            </div>
        </div>
    
        <div class="container">
            @RenderBody()
            <hr />
            <footer>
                <p>&copy; @DateTime.Now.Year - Contoso University</p>
            </footer>
        </div>
    
        @Scripts.Render("~/bundles/jquery")
        @Scripts.Render("~/bundles/bootstrap")
        @RenderSection("scripts", required: false)
    </body>
    </html>
    
  2. Dans Views\Home\Index.cshtml, remplacez le contenu du fichier par le code suivant pour remplacer le texte sur ASP.NET et MVC par du texte sur cette application :

    @{
        ViewBag.Title = "Home Page";
    }
    
    <div class="jumbotron">
        <h1>Contoso University</h1>
    </div>
    <div class="row">
        <div class="col-md-4">
            <h2>Welcome to Contoso University</h2>
            <p>Contoso University is a sample application that
            demonstrates how to use Entity Framework 6 in an 
            ASP.NET MVC 5 web application.</p>
        </div>
        <div class="col-md-4">
            <h2>Build it from scratch</h2>
            <p>You can build the application by following the steps in the tutorial series on the ASP.NET site.</p>
            <p><a class="btn btn-default" href="http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/">See the tutorial &raquo;</a></p>
        </div>
        <div class="col-md-4">
            <h2>Download it</h2>
            <p>You can download the completed project.</p>
            <p><a class="btn btn-default" href="https://webpifeed.blob.core.windows.net/webpifeed/Partners/ASP.NET%20MVC%20Application%20Using%20Entity%20Framework%20Code%20First.zip">Download &raquo;</a></p>
        </div>
    </div>
    
  3. Appuyez sur Ctrl+F5 pour exécuter le site web. La page d’accueil avec le menu main s’affiche.

Installer Entity Framework 6

  1. Dans le menu Outils , choisissez Gestionnaire de package NuGet, puis console du gestionnaire de package.

  2. Dans la fenêtre Console du Gestionnaire de package, entrez la commande suivante :

    Install-Package EntityFramework
    

Cette étape est l’une des quelques étapes que vous effectuez manuellement dans ce tutoriel, mais qui aurait pu être effectuée automatiquement par la fonctionnalité de génération de modèles ASP.NET MVC. Vous les effectuez manuellement afin de voir les étapes requises pour utiliser Entity Framework (EF). Vous utiliserez ultérieurement la structure pour créer le contrôleur et les vues MVC. Une alternative consiste à laisser la structure automatiquement installer le package NUGet EF, créer la classe de contexte de base de données et créer la chaîne de connexion. Lorsque vous êtes prêt à le faire de cette façon, il vous suffit d’ignorer ces étapes et de structurer votre contrôleur MVC après avoir créé vos classes d’entité.

Créer le modèle de données

Ensuite, vous allez créer des classes d’entités pour l’application Contoso University. Vous allez commencer par les trois entités suivantes :

Sûr<->Inscription-Étudiant<>

Entités Relation
Cours à l’inscription Un-à-plusieurs
Étudiant à l’inscription Un-à-plusieurs

Il existe une relation un-à-plusieurs entre les entités Student et Enrollment, et une relation un-à-plusieurs entre les entités Course et Enrollment. En d’autres termes, un étudiant peut être inscrit dans un nombre quelconque de cours et un cours peut avoir un nombre quelconque d’élèves inscrits.

Dans les sections suivantes, vous allez créer une classe pour chacune de ces entités.

Notes

Si vous essayez de compiler le projet avant d’avoir créé toutes ces classes d’entités, vous obtiendrez des erreurs de compilateur.

L’entité Student

  • Dans le dossier Modèles, créez un fichier de classe nommé Student.cs en cliquant avec le bouton droit sur le dossier dans Explorateur de solutions et en choisissant Ajouter une>classe. Remplacez le code du modèle par le code suivant :

    using System;
    using System.Collections.Generic;
    
    namespace ContosoUniversity.Models
    {
        public class Student
        {
            public int ID { get; set; }
            public string LastName { get; set; }
            public string FirstMidName { get; set; }
            public DateTime EnrollmentDate { get; set; }
            
            public virtual ICollection<Enrollment> Enrollments { get; set; }
        }
    }
    

La propriété ID devient la colonne de clé primaire de la table de base de données qui correspond à cette classe. Par défaut, Entity Framework interprète une propriété nommée ID ou classnameID comme clé primaire.

La propriété Enrollments est une propriété de navigation. Les propriétés de navigation contiennent d’autres entités qui sont associées à cette entité. Dans ce cas, la Enrollments propriété d’une Student entité contiendra toutes les Enrollment entités associées à cette Student entité. En d’autres termes, si une ligne donnée Student de la base de données a deux lignes associées Enrollment (lignes qui contiennent la valeur de clé primaire de cet étudiant dans sa StudentID colonne de clé étrangère), la propriété de navigation de Enrollments cette Student entité contiendra ces deux Enrollment entités.

Les propriétés de navigation sont généralement définies de virtual telle sorte qu’elles puissent tirer parti de certaines fonctionnalités d’Entity Framework telles que le chargement paresseux. (Le chargement différé sera expliqué plus loin, dans le didacticiel Lecture des données associées plus loin dans cette série.)

Si une propriété de navigation peut contenir plusieurs entités (comme dans des relations plusieurs à plusieurs ou un -à-plusieurs), son type doit être une liste dans laquelle les entrées peuvent être ajoutées, supprimées et mises à jour, telle que ICollection.

L’entité Enrollment

  • Dans le dossier Models, créez Enrollment.cs et remplacez le code existant par le code suivant :

    namespace ContosoUniversity.Models
    {
        public enum Grade
        {
            A, B, C, D, F
        }
    
        public class Enrollment
        {
            public int EnrollmentID { get; set; }
            public int CourseID { get; set; }
            public int StudentID { get; set; }
            public Grade? Grade { get; set; }
            
            public virtual Course Course { get; set; }
            public virtual Student Student { get; set; }
        }
    }
    

La EnrollmentID propriété sera la clé primaire ; cette entité utilise le modèle classnameID au lieu de ID lui-même, comme vous l’avez vu dans l’entité Student . En général, vous choisissez un modèle et l’utilisez dans tout votre modèle de données. Ici, la variante illustre que vous pouvez utiliser l’un ou l’autre modèle. Dans un tutoriel ultérieur, vous verrez comment l’utilisation ID de sans classname facilite l’implémentation de l’héritage dans le modèle de données.

La Grade propriété est une énumération. La présence du point d’interrogation après la déclaration de type Grade indique que la propriété Gradeaccepte les valeurs Null. Une note null est différente d’une note zéro. Null signifie qu’une note n’est pas connue ou n’a pas encore été attribuée.

La propriété StudentID est une clé étrangère, et la propriété de navigation correspondante est Student. Une entité Enrollment est associée à une entité Student, donc la propriété peut contenir uniquement une entité Student unique (contrairement à la propriété de navigation Student.Enrollments que vous avez vue précédemment, qui peut contenir plusieurs entités Enrollment).

La propriété CourseID est une clé étrangère, et la propriété de navigation correspondante est Course. Une entité Enrollment est associée à une entité Course.

Entity Framework interprète une propriété comme une propriété de clé étrangère si elle est nommée <propriété de navigation nom nom><de> la propriété de clé primaire (par exemple, pour la Student propriété de navigation, StudentID car la clé primaire de l’entité Student est ID). Les propriétés de clé étrangère peuvent également être nommées simplement le même <nom> de propriété de clé primaire (par exemple, CourseID étant donné que la clé primaire de l’entité Course est CourseID).

L’entité Course

  • Dans le dossier Models , créez Course.cs, en remplaçant le code du modèle par le code suivant :

    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations.Schema;
    
    namespace ContosoUniversity.Models
    {
        public class Course
        {
            [DatabaseGenerated(DatabaseGeneratedOption.None)]
            public int CourseID { get; set; }
            public string Title { get; set; }
            public int Credits { get; set; }
            
            public virtual ICollection<Enrollment> Enrollments { get; set; }
        }
    }
    

La propriété Enrollments est une propriété de navigation. Une entité Course peut être associée à un nombre quelconque d’entités Enrollment.

Nous fournirons plus de détails sur l’attribut DatabaseGeneratedAttribute dans un didacticiel ultérieur de cette série. En fait, cet attribut vous permet d’entrer la clé primaire pour le cours plutôt que de laisser la base de données la générer.

Créer le contexte de base de données

La classe main qui coordonne la fonctionnalité Entity Framework pour un modèle de données donné est la classe de contexte de base de données. Vous créez cette classe en dérivant de la classe System.Data.Entity.DbContext . Dans votre code, vous spécifiez les entités qui sont incluses dans le modèle de données. Vous pouvez également personnaliser un certain comportement d’Entity Framework. Dans ce projet, la classe est nommée SchoolContext.

  • Pour créer un dossier dans le projet ContosoUniversity, cliquez avec le bouton droit sur le projet dans Explorateur de solutions, cliquez sur Ajouter, puis cliquez sur Nouveau dossier. Nommez le nouveau dossier DAL (pour Couche d’accès aux données). Dans ce dossier, créez un fichier de classe nommé SchoolContext.cs et remplacez le code du modèle par le code suivant :

    using ContosoUniversity.Models;
    using System.Data.Entity;
    using System.Data.Entity.ModelConfiguration.Conventions;
    
    namespace ContosoUniversity.DAL
    {
        public class SchoolContext : DbContext
        {
        
            public SchoolContext() : base("SchoolContext")
            {
            }
            
            public DbSet<Student> Students { get; set; }
            public DbSet<Enrollment> Enrollments { get; set; }
            public DbSet<Course> Courses { get; set; }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            }
        }
    }
    

Spécifier des jeux d’entités

Ce code crée une propriété DbSet pour chaque jeu d’entités. Dans la terminologie Entity Framework, un jeu d’entités correspond généralement à une table de base de données, et une entité correspond à une ligne de la table.

Notes

Vous pouvez omettre les DbSet<Enrollment> instructions et DbSet<Course> et cela fonctionnerait de la même façon. Entity Framework les inclut implicitement, car l’entité Student fait référence à l’entité Enrollment et l’entité Enrollment référence l’entité Course .

Spécifier la chaîne de connexion

Le nom de la chaîne de connexion (que vous ajouterez ultérieurement au fichier Web.config) est transmis au constructeur.

public SchoolContext() : base("SchoolContext")
{
}

Vous pouvez également passer la chaîne de connexion elle-même au lieu du nom d’une chaîne stockée dans le fichier Web.config. Pour plus d’informations sur les options permettant de spécifier la base de données à utiliser, consultez Chaînes de connexion et modèles.

Si vous ne spécifiez pas explicitement de chaîne de connexion ou de nom d’une chaîne de connexion, Entity Framework suppose que le nom de la chaîne de connexion est identique au nom de la classe. Le nom de la chaîne de connexion par défaut dans cet exemple serait SchoolContextalors , identique à ce que vous spécifiez explicitement.

Spécifier des noms de table au singulier

L’instruction modelBuilder.Conventions.Remove de la méthode OnModelCreating empêche le pluralisation des noms de tables. Si vous ne l’avez pas fait, les tables générées dans la base de données seraient nommées Students, Courseset Enrollments. Au lieu de cela, les noms de table seront Student, Courseet Enrollment. Les développeurs ne sont pas tous d’accord sur la nécessité d’utiliser des noms de table au pluriel. Ce tutoriel utilise le formulaire unique, mais le point important est que vous pouvez sélectionner le formulaire que vous préférez en incluant ou en omettant cette ligne de code.

Initialiser la base de données avec des données de test

Entity Framework peut créer (ou supprimer et recréer) automatiquement une base de données lorsque l’application s’exécute. Vous pouvez spécifier que cette opération doit être effectuée chaque fois que votre application s’exécute ou uniquement lorsque le modèle n’est pas synchronisé avec la base de données existante. Vous pouvez également écrire une Seed méthode qu’Entity Framework appelle automatiquement après avoir créé la base de données afin de la remplir avec des données de test.

Le comportement par défaut consiste à créer une base de données uniquement si elle n’existe pas (et à lever une exception si le modèle a changé et que la base de données existe déjà). Dans cette section, vous allez spécifier que la base de données doit être supprimée et recréée chaque fois que le modèle change. La suppression de la base de données entraîne la perte de toutes vos données. Cela est généralement correct pendant le développement, car la Seed méthode s’exécute lorsque la base de données est recréé et recréera vos données de test. Toutefois, en production, vous ne souhaitez généralement pas perdre toutes vos données chaque fois que vous devez modifier le schéma de base de données. Plus tard, vous verrez comment gérer les modifications de modèle à l’aide de Migrations Code First pour modifier le schéma de base de données au lieu de supprimer et recréer la base de données.

  1. Dans le dossier DAL, créez un fichier de classe nommé SchoolInitializer.cs et remplacez le code du modèle par le code suivant, ce qui entraîne la création d’une base de données si nécessaire et charge les données de test dans la nouvelle base de données.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity;
    using ContosoUniversity.Models;
    
    namespace ContosoUniversity.DAL
    {
        public class SchoolInitializer : System.Data.Entity. DropCreateDatabaseIfModelChanges<SchoolContext>
        {
            protected override void Seed(SchoolContext context)
            {
                var students = new List<Student>
                {
                new Student{FirstMidName="Carson",LastName="Alexander",EnrollmentDate=DateTime.Parse("2005-09-01")},
                new Student{FirstMidName="Meredith",LastName="Alonso",EnrollmentDate=DateTime.Parse("2002-09-01")},
                new Student{FirstMidName="Arturo",LastName="Anand",EnrollmentDate=DateTime.Parse("2003-09-01")},
                new Student{FirstMidName="Gytis",LastName="Barzdukas",EnrollmentDate=DateTime.Parse("2002-09-01")},
                new Student{FirstMidName="Yan",LastName="Li",EnrollmentDate=DateTime.Parse("2002-09-01")},
                new Student{FirstMidName="Peggy",LastName="Justice",EnrollmentDate=DateTime.Parse("2001-09-01")},
                new Student{FirstMidName="Laura",LastName="Norman",EnrollmentDate=DateTime.Parse("2003-09-01")},
                new Student{FirstMidName="Nino",LastName="Olivetto",EnrollmentDate=DateTime.Parse("2005-09-01")}
                };
    
                students.ForEach(s => context.Students.Add(s));
                context.SaveChanges();
                var courses = new List<Course>
                {
                new Course{CourseID=1050,Title="Chemistry",Credits=3,},
                new Course{CourseID=4022,Title="Microeconomics",Credits=3,},
                new Course{CourseID=4041,Title="Macroeconomics",Credits=3,},
                new Course{CourseID=1045,Title="Calculus",Credits=4,},
                new Course{CourseID=3141,Title="Trigonometry",Credits=4,},
                new Course{CourseID=2021,Title="Composition",Credits=3,},
                new Course{CourseID=2042,Title="Literature",Credits=4,}
                };
                courses.ForEach(s => context.Courses.Add(s));
                context.SaveChanges();
                var enrollments = new List<Enrollment>
                {
                new Enrollment{StudentID=1,CourseID=1050,Grade=Grade.A},
                new Enrollment{StudentID=1,CourseID=4022,Grade=Grade.C},
                new Enrollment{StudentID=1,CourseID=4041,Grade=Grade.B},
                new Enrollment{StudentID=2,CourseID=1045,Grade=Grade.B},
                new Enrollment{StudentID=2,CourseID=3141,Grade=Grade.F},
                new Enrollment{StudentID=2,CourseID=2021,Grade=Grade.F},
                new Enrollment{StudentID=3,CourseID=1050},
                new Enrollment{StudentID=4,CourseID=1050,},
                new Enrollment{StudentID=4,CourseID=4022,Grade=Grade.F},
                new Enrollment{StudentID=5,CourseID=4041,Grade=Grade.C},
                new Enrollment{StudentID=6,CourseID=1045},
                new Enrollment{StudentID=7,CourseID=3141,Grade=Grade.A},
                };
                enrollments.ForEach(s => context.Enrollments.Add(s));
                context.SaveChanges();
            }
        }
    }
    

    La Seed méthode prend l’objet de contexte de base de données comme paramètre d’entrée, et le code de la méthode utilise cet objet pour ajouter de nouvelles entités à la base de données. Pour chaque type d’entité, le code crée une collection d’entités, les ajoute à la propriété appropriée DbSet , puis enregistre les modifications apportées à la base de données. Il n’est pas nécessaire d’appeler la SaveChanges méthode après chaque groupe d’entités, comme c’est le cas ici, mais cela vous aide à localiser la source d’un problème si une exception se produit pendant que le code écrit dans la base de données.

  2. Pour indiquer à Entity Framework d’utiliser votre classe d’initialiseur, ajoutez un élément à l’élément entityFramework dans le fichier Web.configde l’application (celui du dossier du projet racine), comme illustré dans l’exemple suivant :

    <entityFramework>
      <contexts>
        <context type="ContosoUniversity.DAL.SchoolContext, ContosoUniversity">
          <databaseInitializer type="ContosoUniversity.DAL.SchoolInitializer, ContosoUniversity" />
        </context>
      </contexts>
      <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
        <parameters>
          <parameter value="v11.0" />
        </parameters>
      </defaultConnectionFactory>
      <providers>
        <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      </providers>
    </entityFramework>
    

    spécifie context type le nom complet de la classe de contexte et l’assembly dans lequel elle se trouve, et spécifie databaseinitializer type le nom complet de la classe d’initialiseur et de l’assembly dans lequel elle se trouve. (Lorsque vous ne souhaitez pas qu’EF utilise l’initialiseur, vous pouvez définir un attribut sur l’élément context : disableDatabaseInitialization="true".) Pour plus d’informations, consultez Paramètres du fichier de configuration.

    Une alternative à la définition de l’initialiseur dans le fichier Web.config consiste à le faire dans du code en ajoutant une Database.SetInitializer instruction à la Application_Start méthode dans le fichier Global.asax.cs . Pour plus d’informations, consultez Présentation des initialiseurs de base de données dans Entity Framework Code First.

L’application est maintenant configurée de sorte que lorsque vous accédez à la base de données pour la première fois dans une exécution donnée de l’application, Entity Framework compare la base de données au modèle (vos SchoolContext classes d’entité et ). En cas de différence, l’application supprime et recrée la base de données.

Notes

Lorsque vous déployez une application sur un serveur web de production, vous devez supprimer ou désactiver le code qui supprime et recrée la base de données. Vous le ferez dans un tutoriel ultérieur de cette série.

Configurer EF 6 pour utiliser LocalDB

LocalDB est une version légère du moteur de base de données SQL Server Express. Il est facile à installer et à configurer, démarre à la demande et s’exécute en mode utilisateur. LocalDB s’exécute dans un mode d’exécution spécial de SQL Server Express qui vous permet d’utiliser des bases de données en tant que fichiers .mdf. Vous pouvez placer les fichiers de base de données LocalDB dans le dossier App_Data d’un projet web si vous souhaitez pouvoir copier la base de données avec le projet. La fonctionnalité instance utilisateur dans SQL Server Express vous permet également d’utiliser des fichiers .mdf, mais la fonctionnalité instance utilisateur est déconseillée . Par conséquent, LocalDB est recommandé pour utiliser des fichiers .mdf. LocalDB est installé par défaut avec Visual Studio.

En règle générale, SQL Server Express n’est pas utilisé pour les applications web de production. LocalDB en particulier n’est pas recommandé pour une utilisation en production avec une application web, car elle n’est pas conçue pour fonctionner avec IIS.

  • Dans ce tutoriel, vous allez utiliser LocalDB. Ouvrez le fichier Web.configd’application et ajoutez un connectionStrings élément qui précède l’élément appSettings , comme illustré dans l’exemple suivant. (Veillez à mettre à jour le fichier Web.config dans le dossier du projet racine. Il existe également un fichier Web.config dans le sous-dossier Vues que vous n’avez pas besoin de mettre à jour.)

    <connectionStrings>
        <add name="SchoolContext" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=ContosoUniversity1;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
    </connectionStrings>
    <appSettings>
      <add key="webpages:Version" value="3.0.0.0" />
      <add key="webpages:Enabled" value="false" />
      <add key="ClientValidationEnabled" value="true" />
      <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    </appSettings>
    

La chaîne de connexion que vous avez ajoutée spécifie qu’Entity Framework utilisera une base de données LocalDB nommée ContosoUniversity1.mdf. (La base de données n’existe pas encore, mais EF la créera.) Si vous souhaitez créer la base de données dans votre dossier App_Data , vous pouvez ajouter AttachDBFilename=|DataDirectory|\ContosoUniversity1.mdf à la chaîne de connexion. Pour plus d’informations sur les chaînes de connexion, consultez chaînes de connexion SQL Server pour ASP.NET applications web.

Vous n’avez pas besoin d’une chaîne de connexion dans le fichier Web.config . Si vous ne fournissez pas de chaîne de connexion, Entity Framework utilise une chaîne de connexion par défaut basée sur votre classe de contexte. Pour plus d’informations, consultez Code First to a New Database.

Créer un contrôleur et des vues

Vous allez maintenant créer une page web pour afficher les données. Le processus de demande des données déclenche automatiquement la création de la base de données. Vous allez commencer par créer un contrôleur. Mais avant cela, générez le projet pour rendre le modèle et les classes de contexte disponibles pour la génération automatique des contrôleurs MVC.

  1. Cliquez avec le bouton droit sur le dossier Controllers dans Explorateur de solutions, sélectionnez Ajouter, puis cliquez sur Nouvel élément généré automatiquement.

  2. Dans la boîte de dialogue Ajouter une structure , sélectionnez Contrôleur MVC 5 avec vues, à l’aide d’Entity Framework, puis choisissez Ajouter.

    Boîte de dialogue Ajouter une structure dans Visual Studio

  3. Dans la boîte de dialogue Ajouter un contrôleur , effectuez les sélections suivantes, puis choisissez Ajouter :

    • Classe de modèle : Student (ContosoUniversity.Models). (Si vous ne voyez pas cette option dans la liste déroulante, générez le projet et réessayez.)

    • Classe de contexte de données : SchoolContext (ContosoUniversity.DAL).

    • Nom du contrôleur : StudentController (et non StudentsController).

    • Conservez les valeurs par défaut pour les autres champs.

      Lorsque vous cliquez sur Ajouter, la structure crée un fichier StudentController.cs et un ensemble de vues (fichiers .cshtml ) qui fonctionnent avec le contrôleur. À l’avenir, lorsque vous créez des projets qui utilisent Entity Framework, vous pouvez également tirer parti de certaines fonctionnalités supplémentaires du générateur de modèles : créez votre première classe de modèle, ne créez pas de chaîne de connexion, puis, dans la zone Ajouter un contrôleur , spécifiez Nouveau contexte de données en sélectionnant le + bouton en regard de Classe de contexte de données. Le générateur de modèles automatique crée votre DbContext classe et votre chaîne de connexion, ainsi que le contrôleur et les vues.

  4. Visual Studio ouvre le fichier Controllers\StudentController.cs . Vous voyez qu’une variable de classe qui instancie un objet de contexte de base de données a été créée :

    private SchoolContext db = new SchoolContext();
    

    La Index méthode d’action obtient une liste d’étudiants à partir de l’entité Students définie en lisant la Students propriété du contexte de base de données instance :

    public ViewResult Index()
    {
        return View(db.Students.ToList());
    }
    

    La vue Student\Index.cshtml affiche cette liste dans un tableau :

    <table>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.LastName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.FirstMidName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.EnrollmentDate)
            </th>
            <th></th>
        </tr>
    
    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.LastName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.FirstMidName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.EnrollmentDate)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
                @Html.ActionLink("Details", "Details", new { id=item.ID }) |
                @Html.ActionLink("Delete", "Delete", new { id=item.ID })
            </td>
        </tr>
    }
    
  5. Appuyez sur Ctrl+F5 pour exécuter le projet. (Si vous obtenez une erreur « Impossible de créer un cliché instantané », fermez le navigateur et réessayez.)

    Cliquez sur l’onglet Étudiants pour afficher les données de test que la Seed méthode a insérées. Selon l’étroitesse de la fenêtre de votre navigateur, vous verrez le lien onglet Étudiant dans la barre d’adresses supérieure ou vous devrez cliquer sur le coin supérieur droit pour afficher le lien.

    Bouton Menu

Afficher la base de données

Lorsque vous avez exécuté la page Étudiants et que l’application a essayé d’accéder à la base de données, EF a découvert qu’il n’y avait pas de base de données et en a créé une. EF a ensuite exécuté la méthode seed pour remplir la base de données avec des données.

Vous pouvez utiliser server Explorer ou SQL Server Explorateur d'objets (SSOX) pour afficher la base de données dans Visual Studio. Pour ce tutoriel, vous allez utiliser server Explorer.

  1. Fermez le navigateur.

  2. Dans Server Explorer, développez Connexions de données (vous devrez peut-être d’abord sélectionner le bouton Actualiser), School Context (ContosoUniversity), puis Tables pour afficher les tables de votre nouvelle base de données.

  3. Cliquez avec le bouton droit sur la table Student , puis cliquez sur Afficher les données de table pour afficher les colonnes qui ont été créées et les lignes qui ont été insérées dans la table.

  4. Fermez la connexion server Explorer.

Les fichiers de base de données ContosoUniversity1.mdf et .ldf se trouvent dans le dossier %USERPROFILE%.

Étant donné que vous utilisez l’initialiseur DropCreateDatabaseIfModelChanges , vous pouvez maintenant apporter une modification à la Student classe, réexécuter l’application, et la base de données est automatiquement recréé pour correspondre à votre modification. Par exemple, si vous ajoutez une EmailAddress propriété à la Student classe, réexécutez la page Étudiants, puis examinez à nouveau la table, une nouvelle EmailAddress colonne s’affiche.

Conventions

La quantité de code que vous avez dû écrire pour qu’Entity Framework puisse créer une base de données complète pour vous est minime en raison des conventions ou des hypothèses formulées par Entity Framework. Certains d’entre eux ont déjà été notés ou ont été utilisés sans que vous en soyez conscient :

  • Les formes pluralisées des noms de classes d’entités sont utilisées comme noms de table.
  • Les noms des propriétés d’entités sont utilisés comme noms de colonnes.
  • Les propriétés d’entité nommées ID ou classnameID sont reconnues en tant que propriétés de clé primaire.
  • Une propriété est interprétée comme propriété de clé étrangère si elle se nomme<nom de la propriété de navigation><nom de la propriété de clé primaire> (par exemple StudentID pour la propriété de navigation Student, puisque la clé primaire de l’entité Student est ID). Les propriétés de clé étrangère peuvent également être nommées simplement le même <nom> de propriété de clé primaire (par exemple, EnrollmentID étant donné que la clé primaire de l’entité Enrollment est EnrollmentID).

Vous avez vu que les conventions peuvent être remplacées. Par exemple, vous avez spécifié que les noms de table ne doivent pas être pluralisés et vous verrez plus tard comment marquer explicitement une propriété en tant que propriété de clé étrangère.

Obtenir le code

Télécharger le projet terminé

Ressources supplémentaires

Pour plus d’informations sur EF 6, consultez les articles suivants :

Étapes suivantes

Dans ce tutoriel, vous allez :

  • Création d’une application web MVC
  • Configurer le style du site
  • Entity Framework 6 installé
  • Créer le modèle de données
  • Créer le contexte de base de données
  • Initialiser la base de données avec des données de test
  • Configurer EF 6 pour utiliser LocalDB
  • Créer un contrôleur et des vues
  • Afficher la base de données

Passez à l’article suivant pour découvrir comment passer en revue et personnaliser le code CRUD (Create, Read, Update, Delete) dans vos contrôleurs et vues.