Fractionnement de table du concepteur

Cette procédure pas à pas montre comment mapper plusieurs types d’entités à une seule table en modifiant un modèle avec entity Framework Designer (EF Designer).

Une des raisons pour lesquelles vous souhaiterez peut-être utiliser le fractionnement de table 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 du concepteur EF.

EF Designer

Prérequis

Pour exécuter cette procédure pas à pas, vous avez besoin des éléments suivants :

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 d’application console.
  • Entrez TableSplittingSample comme nom du projet, puis cliquez sur OK.

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

  • Cliquez avec le bouton droit sur le nom du projet dans Explorateur de solutions, pointez sur Ajouter, puis cliquez sur Nouvel élément.
  • Sélectionnez Données dans le menu de gauche, puis ADO.NET modèle de données d’entité dans le volet Modèles.
  • Entrez TableSplittingModel.edmx pour le 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.
  • Cliquez 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 pour le nom de la base de données, puis cliquez sur OK. La boîte de dialogue Choisir votre connexion de données est mise à jour avec le paramètre de connexion de votre base de données.
  • Dans la boîte de dialogue Choisir vos objets de base de données, dépliez le nœud Tables et cochez la table Person . Cette opération ajoute la table spécifiée au modèle School .
  • Cliquez sur Terminer.

Le Concepteur d’entités, qui fournit une aire de conception pour la modification de votre modèle, s’affiche. 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.

Notes

L’entité Person ne contient aucune propriété pouvant 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é Person , puis appuyez sur Ctrl+X .
  • Sélectionnez l’entité HireInfo , puis appuyez sur Ctrl+V .
  • Créez 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 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 nécessite la fenêtre Détails du mappage . Si vous ne voyez pas cette fenêtre, cliquez avec le bouton droit sur l’aire de conception et 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. 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.

    Propriétés de mappage

  • 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é Contraintes référentielles , puis cliquez sur le bouton points de suspension.

  • Sélectionnez Personne 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 School suite à l’exécution de cette application. 

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

    Insérer des données de combinaison de données Person et HireInfo

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

    Sélectionner 1

  • L’instruction 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

    Sélectionner 2