Fractionnement d’entité du concepteur

Cette procédure pas à pas montre comment mapper un type d’entité à deux tables en modifiant un modèle avec Entity Framework Designer (EF Designer). Vous pouvez mapper une entité à plusieurs tables quand les tables partagent une clé commune. Les concepts qui s'appliquent au mappage d'un type d'entité à deux tables sont facilement étendus au mappage d'un type d'entité à plusieurs tables.

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

EF Designer

Prérequis

Visual Studio 2012 ou Visual Studio 2010, Ultimate, Premium, Professional ou Web Express Edition.

Créer la base de données

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 2012, vous allez créer une base de données LocalDB.
  • Si vous utilisez Visual Studio 2010, vous allez créer une base de données SQL Express.

Tout d’abord, nous allons créer une base de données avec deux tables que nous allons combiner en une seule entité.

  • Ouvrez Visual Studio.
  • Affichage -> Explorateur de serveurs
  • Cliquez avec le bouton droit sur Connexions de données -> Ajouter une connexion…
  • Si vous ne vous êtes jamais connecté à une base de données à partir de l’Explorateur de serveurs, vous devez sélectionner Microsoft SQL Server comme source de données
  • Connectez-vous à LocalDB ou SQL Express, selon la version que vous avez installée
  • Entrez EntitySplitting comme nom de base de données
  • Sélectionnez OK et vous serez invité à créer une base de données, puis sélectionnez Oui
  • La nouvelle base de données s’affiche désormais dans l’Explorateur de serveurs
  • Si vous utilisez Visual Studio 2012
    • Cliquez avec le bouton droit sur la base de données dans l’Explorateur de serveurs et sélectionnez Nouvelle requête
    • Copiez le code SQL suivant dans la nouvelle requête, puis cliquez avec le bouton droit sur la requête et sélectionnez Exécuter
  • Si vous utilisez Visual Studio 2010
    • Sélectionnez Données -> Éditeur Transact SQL -> Nouvelle connexion de requête...
    • Entrez .\SQLEXPRESS comme nom de serveur, puis cliquez sur OK
    • Sélectionnez la base de données EntitySplitting dans la liste déroulante en haut de l’éditeur de requête
    • Copiez le code SQL suivant dans la nouvelle requête, puis cliquez avec le bouton droit sur la requête et sélectionnez Exécuter SQL
CREATE TABLE [dbo].[Person] (
[PersonId] INT IDENTITY (1, 1) NOT NULL,
[FirstName] NVARCHAR (200) NULL,
[LastName] NVARCHAR (200) NULL,
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([PersonId] ASC)
);

CREATE TABLE [dbo].[PersonInfo] (
[PersonId] INT NOT NULL,
[Email] NVARCHAR (200) NULL,
[Phone] NVARCHAR (50) NULL,
CONSTRAINT [PK_PersonInfo] PRIMARY KEY CLUSTERED ([PersonId] ASC),
CONSTRAINT [FK_Person_PersonInfo] FOREIGN KEY ([PersonId]) REFERENCES [dbo].[Person] ([PersonId]) ON DELETE CASCADE
);

Créer le projet

  • 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 MapEntityToTablesSample comme nom du projet, puis cliquez sur OK.
  • Cliquez sur Non si vous êtes invité à enregistrer la requête SQL créée dans la première section.

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

  • 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 MapEntityToTablesModel.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
  • Sélectionnez la connexion EntitySplitting dans la liste déroulante, puis cliquez sur Suivant.
  • Dans la boîte de dialogue Choisir vos objets de base de données, cochez la case située en regard du nœud Tables . Cela ajoute toutes les tables de la base de données EntitySplitting au modèle.
  • Cliquez sur Terminer.

Le Concepteur d'entités, qui fournit une aire de conception permettant de modifier votre modèle, est affiché.

Pour mapper une entité à deux tables

Dans cette étape, nous allons mettre à jour le type d’entité Person pour combiner les données des tables Person et PersonInfo .

  • Sélectionnez les propriétés Email et Téléphone de l’entité **PersonInfo **, puis appuyez sur les touches Ctrl+X .

  • Sélectionnez l’entité **Person **, puis appuyez sur les touches Ctrl+V .

  • Sur l’aire de conception, sélectionnez l’entité PersonInfo , puis appuyez sur le bouton Supprimer du clavier.

  • Cliquez sur Non lorsque vous êtes invité à supprimer la table PersonInfo du modèle, nous allons la mapper à l’entité Person .

    Delete Tables

Les étapes suivantes requièrent 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é Person, puis cliquez sur <Ajouter une table ou une vue> dans la fenêtre Détails du mappage.
  • Sélectionnez **PersonInfo ** dans la liste déroulante. La fenêtre Détails du mappage est mise à jour avec les mappages de colonnes par défaut, ce sont des éléments appropriés pour notre scénario.

Le type d’entité Person est désormais mappé aux tables Person et PersonInfo .

Mapping 2

Utiliser le Modèle

  • Collez le code suivant dans la méthode Main.
    using (var context = new EntitySplittingEntities())
    {
        var person = new Person
        {
            FirstName = "John",
            LastName = "Doe",
            Email = "john@example.com",
            Phone = "555-555-5555"
        };

        context.People.Add(person);
        context.SaveChanges();

        foreach (var item in context.People)
        {
            Console.WriteLine(item.FirstName);
        }
    }
  • Compilez et exécutez l'application.

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

  • Les deux instructions INSERT suivantes ont été exécutées suite à l’exécution de context.SaveChanges(). Ils prennent les données de l’entité Person et les divisent entre les tables Person et PersonInfo .

    Insert 1

    Insert 2

  • L’instruction suivante SELECT a été exécutée suite à l’énumération des personnes dans la base de données. Il combine les données de la table Person et PersonInfo .

    Select Combining Person and PersonInfo Data