Designer de fractionnement de table

Cette procédure pas à pas montre comment mapper plusieurs entités à une table unique en modifiant un modèle avec Entity Framework Designer (EF Designer).

Une raison pour laquelle vous souhaiterez peut-être utiliser le fractionnement de table est qu’il retarde le chargement de certaines propriétés lors de l’utilisation du chargement différé pour charger vos objets. Vous pouvez séparer les propriétés qui peuvent contenir une très grande quantité de données dans une entité distincte et la charger uniquement si nécessaire.

L’image suivante montre les fenêtres principales utilisées lors de l’utilisation de EF Designer.

EF Designer

Prérequis

Pour exécuter ce processus pas à pas, vous devez :

Configurer le projet

Cette procédure pas à pas utilise Visual Studio 2012.

  • Ouvrez Visual Studio 2012.
  • Dans le menu Fichier , pointez sur Nouveau, puis cliquez sur Projet.
  • Dans le volet gauche, cliquez sur Visual C#, puis sélectionnez le modèle Application console.
  • Entrez TableSplittingSample comme nom du projet, puis cliquez sur OK.

Créer un modèle basé sur la base de données School

  • Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nom du projet, pointez sur Ajouter, puis cliquez sur Nouvel élément.
  • Sélectionnez Données dans le menu de gauche, puis sélectionnez ADO.NET Entity Data Model dans le menu des Modèles.
  • Entrez TableSplittingModel.edmx comme nom de fichier, puis cliquez sur Ajouter.
  • Dans la boîte de dialogue Choisir le contenu du modèle, sélectionnez Générer à partir de la base de données, puis cliquez sur Suivant.
  • Cliquer sur Nouvelle connexion. Dans la boîte de dialogue Propriétés de connexion, entrez le nom du serveur (par exemple, (localdb)\mssqllocaldb), sélectionnez la méthode d'authentification, tapez School comme nom de base de données, puis cliquez sur OK. La boîte de dialogue Choisir votre connexion de données est mise à jour avec vos paramètres de connexion de base de données.
  • Dans la boîte de dialogue Choisir vos objets de base de donnée, déplier Tables et sélectionnez la table Personne. Cela ajoute la table spécifiée au modèle School.
  • Cliquez sur Terminer.

Le Concepteur d'entités, qui fournit une aire de conception permettant de modifier votre modèle, est affiché. Tous les objets que vous avez sélectionnés dans la boîte de dialogue Choisir vos objets de base de données sont ajoutés au modèle.

Mapper deux entités à une seule table

Dans cette section, vous allez fractionner l’entité Person en deux entités, puis les mapper à une seule table.

Remarque

L’entité personne ne contient aucune propriété susceptible de contenir une grande quantité de données ; il est simplement utilisé comme exemple.

  • Cliquez avec le bouton droit sur une zone vide de l'aire de conception, pointez sur Ajouter Nouveau, puis cliquez sur Entité. La boîte de dialogue Nouvelle entité s'affiche.
  • Tapez HireInfo pour le nom de l’entité et PersonID pour le nom de la propriété de clé.
  • Cliquez sur OK.
  • Un nouveau type d'entité est créé et affiché sur l'aire de conception.
  • Sélectionnez la propriété HireDate du type d’entité personne, puis appuyez sur touches Ctrl+X .
  • Sélectionnez l’entité HireInfo, puis appuyez sur les touches Ctrl+V.
  • Créer une association entre Person et HireInfo. Pour ce faire, cliquez avec le bouton droit sur une zone vide de l'aire de conception, pointez sur Ajouter un nouveau, puis cliquez sur Association….
  • La boîte de dialogue Ajouter une association s'affiche. Le nom PersonHireInfo est donné par défaut.
  • Spécifiez la multiplicité 1(Un) aux deux extrémités de la relation.
  • Appuyez sur OK.

L’étape suivante requiert la fenêtre Détails du mappage. Si cette fenêtre n'est pas visible, cliquez avec le bouton droit sur l'aire de conception, puis sélectionnez Détails du mappage.

  • Sélectionnez le type d’entité HireInfo, puis cliquez sur <Ajouter une table ou une vue> dans la fenêtre Détails du mappage.

  • Sélectionnez personne dans la liste déroulante <Ajouter une table ou une vue> liste déroulante. La liste contient des tables ou des vues auxquelles l’entité sélectionnée peut être mappée. Les propriétés appropriées doivent être mappées par défaut.

    Mapping Properties

  • Sélectionnez l’association PersonHireInfo sur l’aire de conception.

  • Cliquez avec le bouton droit sur l’association sur l’aire de conception, puis sélectionnez Propriétés.

  • Dans la fenêtre Propriétés, sélectionnez la propriété Referential Constraints, puis cliquez sur le bouton représentant des points de suspension.

  • Sélectionnez Person dans la liste déroulante Principal.

  • Appuyez sur OK.

 

Utiliser le Modèle

  • Collez le code suivant dans la méthode Main.
    using (var context = new SchoolEntities())
    {
        Person person = new Person()
        {
            FirstName = "Kimberly",
            LastName = "Morgan",
            Discriminator = "Instructor",
        };

        person.HireInfo = new HireInfo()
        {
            HireDate = DateTime.Now
        };

        // Add the new person to the context.
        context.People.Add(person);

        // Insert a row into the Person table.  
        context.SaveChanges();

        // Execute a query against the Person table.
        // The query returns columns that map to the Person entity.
        var existingPerson = context.People.FirstOrDefault();

        // Execute a query against the Person table.
        // The query returns columns that map to the Instructor entity.
        var hireInfo = existingPerson.HireInfo;

        Console.WriteLine("{0} was hired on {1}",
            existingPerson.LastName, hireInfo.HireDate);
    }
  • Compilez et exécutez l'application.

Les instructions T-SQL suivantes ont été exécutées sur la base de données École suite à l’exécution de cette application. 

  • Le INSERT suivant a été exécuté suite à l’exécution du contexte. SaveChanges() et combine les données des entités Person et HireInfo

    Insert Combining Person and HireInfo Data

  • La SELECT suivante a été exécutée suite à l’exécution du contexte. People.FirstOrDefault() et sélectionne uniquement les colonnes mappées à Person

    Select 1

  • La SELECT suivante a été exécutée suite à l’accès à la propriété de navigation existingPerson.Instructor et sélectionne uniquement les colonnes mappées à HireInfo

    Select 2