Présentation d'Entity Framework

Entity Framework est un ensemble de technologies dans ADO.NET qui prennent en charge le développement d'applications logicielles orientées données. Les architectes et les développeurs d'applications orientées données sont confrontés à la nécessité d'atteindre deux objectifs très différents. Ils doivent modeler les entités, les relations et la logique des problèmes liés à l'activité de l'entreprise qu'ils résolvent, et ils doivent également travailler avec les moteurs de données utilisés pour stocker et récupérer les données. Les données peuvent être réparties entre plusieurs systèmes de stockage, chacun ayant ses propres protocoles ; même les applications qui fonctionnent avec un seul système de stockage doivent équilibrer les besoins du système de stockage par rapport aux besoins en matière d'écriture d'un code d'application efficace et facile à gérer.

Entity Framework permet aux développeurs de travailler avec des données sous la forme de propriétés et d'objets spécifiques aux domaines, tels que des clients et des adresses de clients, sans qu'il soit nécessaire de se préoccuper des tables et des colonnes de base de données sous-jacentes dans lesquelles sont stockées ces données. Cela est rendu possible par l'élévation du niveau d'abstraction auquel les développeurs peuvent travailler lorsqu'ils gèrent les données et par la réduction du code nécessaire pour créer des applications orientées données et en assurer la maintenance. Étant donné qu'Entity Framework est un composant du .NET Framework, les applications Entity Framework peuvent s'exécuter sur tout ordinateur sur lequel .NET Framework 3.5 Service Pack 1 (SP1) est installé.

Donner vie à des modèles conceptuels

La division du modèle de données en trois parties constitue un modèle de conception commun et utilisé de longue date pour la modélisation des données : un modèle conceptuel, un modèle logique et un modèle physique. Le modèle conceptuel définit les entités et les relations dans le système qui est en cours de modélisation. Le modèle logique d'une base de données relationnelle normalise les entités et les relations dans des tables avec des contraintes de clé étrangère. Le modèle physique s'occupe des fonctionnalités d'un moteur de données particulier en spécifiant des détails de stockage tels que le partitionnement et l'indexation.

Le modèle physique est perfectionné par les administrateurs de bases de données pour améliorer les performances, mais les programmeurs qui écrivent du code d'application limitent principalement leur utilisation du modèle logique à l'écriture de requêtes SQL et à l'appel de procédures stockées. Les modèles conceptuels sont généralement utilisés comme un outil permettant de capturer et de communiquer les besoins d'une application, fréquemment sous la forme de diagrammes inertes qui sont consultés et passés en revue dans les phases préliminaires d'un projet, puis abandonnés. De nombreuses équipes de développement ne créent pas de modèle conceptuel et commencent en spécifiant des tables, des colonnes et des clés dans une base de données relationnelle.

Entity Framework donne vie aux modèles conceptuels en permettant aux développeurs d'interroger des entités et des relations dans le modèle conceptuel tout en s'appuyant sur Entity Framework pour traduire ces opérations en commandes spécifiques à la source de données. Cela libère des applications des dépendances codées en dur sur une source de données particulière. Le modèle conceptuel, le modèle de stockage et le mappage entre les deux sont exprimés dans une spécification externe, connue sous le nom de modèle EDM (Modèle de données d'entité). Le modèle de stockage et les mappages peuvent changer en fonction des besoins, sans qu'il soit nécessaire de modifier le modèle conceptuel, les classes de données ou le code d'application. Étant donné que les modèles de stockage sont spécifiques au fournisseur, vous pouvez travailler avec un modèle conceptuel cohérent entre différentes sources de données.

Un modèle EDM est défini par les trois fichiers de modèle et de mappage suivants qui ont des extensions de noms de fichiers correspondantes :

  • Fichier CSDL (Conceptual Schema Definition Language) (.csdl) : définit le modèle conceptuel.

  • Fichier SSDL (Store Schema Definition Language) (.ssdl) : définit le modèle de stockage, également appelé « modèle logique ».

  • Fichier MSL (Mapping Specification Language) (.msl) : définit le mappage entre le modèle de stockage et le modèle conceptuel.

Entity Framework utilise ces fichiers de modèle et de mappage basés sur XML pour transformer des opérations de création, de lecture, de mise à jour et de suppression sur des entités et des relations dans le modèle conceptuel en opérations équivalentes dans la source de données. Le modèle EDM prend même en charge le mappage d'entités du modèle conceptuel à des procédures stockées de la source de données. Pour plus d'informations, voir Modélisation des données dans Entity Framework.

Mappage d'objets à des données

La programmation orientée objet présente une difficulté pour l'interaction avec les systèmes de stockage des données. Bien que l'organisation des classes reflète souvent l'organisation exacte des tables de bases de données relationnelles, l'adéquation n'est pas parfaite. Plusieurs tables normalisées correspondent souvent à une seule classe, et les relations entre les classes sont représentées différemment des relations entre les tables. Par exemple, pour représenter le client d'une commande, une classe Order utilise une propriété qui contient une référence à une instance d'une classe Customer, mais une ligne de la table Order d'une base de données contient une colonne (ou un ensemble de colonnes) de clé étrangère avec une valeur qui correspond à une valeur de clé primaire dans la table Customer. Une classe Customer peut avoir une propriété nommée Orders qui contient une collection d'instances de la classe Order alors que la table Customer d'une base de données n'a aucune colonne comparable.

Les solutions existantes ont essayé de rétablir la continuité, suit à ce qui est fréquemment appelé « défaut d'adaptation d'impédance », en mappant uniquement des classes et des propriétés orientées objet à des colonnes et à des tables relationnelles. Au lieu d'adopter cette approche traditionnelle, Entity Framework mappe des tables relationnelles, des colonnes et des contraintes de clé étrangère dans des modèles logiques à des entités et des relations dans des modèles conceptuels. Cela permet une plus grande souplesse dans la définition des objets et l'optimisation du modèle logique. Les outils Modèle de données d'entité génèrent des classes de données extensibles en fonction du modèle conceptuel. Ces classes sont des classes partielles qui peuvent être étendues avec des membres supplémentaires que le développeur ajoute. Les classes générées pour un modèle conceptuel particulier dérivent de classes de base qui fournissent aux services Object Services la matérialisation d'entités sous forme d'objets, ainsi que le suivi et l'enregistrement des modifications. Les développeurs peuvent utiliser ces classes pour travailler avec les entités et les relations sous forme d'objets liés par des propriétés de navigation. Pour plus d'informations sur les services Object Services, voir Vue d'ensemble d'Object Services (Entity Framework).

Accessibilité et modification des données d'entité

Plus qu'une simple solution de mappage relationnel objet supplémentaire, Entity Framework permet fondamentalement à des applications d'accéder à des données qui sont représentées sous la forme d'entités et de relations dans le modèle conceptuel, et de les modifier. Les services Object Services utilisent le modèle EDM pour traduire des requêtes d'objet sur des types d'entités qui sont représentés dans le modèle conceptuel en requêtes spécifiques à la source de données. Les résultats des requêtes sont matérialisés en objets que les services Object Services gèrent. Entity Framework offre les méthodes suivantes pour interroger un modèle EDM et retourner des objets :

  • LINQ to Entities : fournit la prise en charge de LINQ (Language Integrated Query) pour interroger des types d'entités définis dans un modèle conceptuel. Pour plus d'informations, voir Vue d'ensemble de LINQ to Entities.

  • Entity SQL : dialecte indépendant du stockage de SQL qui fonctionne directement avec les entités dans le modèle conceptuel et qui prend en charge les fonctionnalités EDM telles que l'héritage et les relations. Entité SQL est utilisé à la fois avec les requêtes d'objet et avec les requêtes qui sont exécutées à l'aide du fournisseur EntityClient. Pour plus d'informations, voir Vue d'ensemble d'Entity SQL.

  • Méthodes du générateur de requêtes : vous permet de construire des requêtes Entité SQL à l'aide de méthodes de requête de style LINQ. Pour plus d'informations, voir Méthodes du Générateur de requêtes (Entity Framework).

Entity Framework inclut le fournisseur de données EntityClient. Ce fournisseur gère les connexions, traduit des requêtes d'entité dans les requêtes spécifiques à la source de données et retourne un lecteur de données que les services Object Services utilisent pour matérialiser les données d'entité dans des objets. Lorsque la matérialisation d'objets n'est pas requise, le fournisseur EntityClient peut également être utilisé comme un fournisseur de données ADO.NET standard en permettant aux applications d'exécuter des requêtes Entité SQL et d'utiliser le lecteur de données en lecture seule retournées. Pour plus d'informations, voir Fournisseur EntityClient pour Entity Framework.

Le diagramme suivant illustre l'architecture Entity Framework pour l'accès aux données :

Diagramme architectural Entity Framework

Entity Framework génère une classe dérivée du ObjectContext qui représente le conteneur d'entités défini dans le modèle conceptuel. Ce contexte de l'objet fournit les fonctionnalités permettant de suivre les modifications, et de gérer les identités, l'accès concurrentiel et les relations. Cette classe expose également une méthode SaveChanges qui écrit les insertions, les mises à jour et des suppressions dans la source de données. Comme les requêtes, ces modifications sont apportées soit par des commandes générées automatiquement par le système, soit par des procédures stockées qui sont spécifiées par le développeur. Pour plus d'informations, voir Ajout, modification et suppression d'objets (Entity Framework).

Outils Entity Data Model

En plus du runtime Entity Framework, .NET Framework 3.5 SP1 inclut l'outil EDM Generator (EdmGen.exe). Cet utilitaire d'invite de commandes se connecte à une source de données et génère un modèle EDM basé sur un mappage un-à-un entre des entités et des tables. Il utilise également un fichier de modèle conceptuel (.csdl) pour générer un fichier de couche objet qui contient des classes représentant les types d'entités et l'objet ObjectContext. Pour plus d'informations, voir EDM Generator (EdmGen.exe).

Visual Studio 2008 inclut la prise en charge d'un outil évolué qui permet de générer un modèle EDM et d'en effectuer la maintenance dans une application Visual Studio. Modèle de données d'entité Designer prend en charge la création de scénarios de mappage avancés, tels que l'héritage TPT (table par type) et TPH (table par hiérarchie), et fractionne les entités qui mappent à plusieurs tables. Pour plus d'informations, voir Vue d'ensemble d'ADO.NET Entity Data Model Designer.

En savoir plus

Les rubriques suivantes vous permettent den savoir plus sur Entity Framework :

  • Démarrage rapide (Entity Framework)
    Vous montre comment utiliser les outils Modèle de données d'entité avec Visual Studio 2008 pour créer rapidement votre première application Entity Framework.
  • Scénarios d'application (Entity Framework)
    Fournit des liens basés sur les tâches vers des rubriques qui correspondent à des scénarios d'application spécifiques, tels que l'écriture de requêtes, la liaison d'objets à des contrôles de données ou l'implémentation de la logique métier.
  • Fonctionnalités Entity Framework
    Fournit des informations détaillées supplémentaires sur les fonctionnalités qui composent Entity Framework et des liens vers des rubriques qui décrivent ces fonctionnalités.
  • Terminologie Entity Framework
    Définit un grand nombre des termes introduits par le modèle EDM et Entity Framework et qui sont utilisés dans la documentation Entity Framework.
  • Ressources Entity Framework
    Fournit des liens vers des rubriques conceptuelles et des liens vers des rubriques et des ressources externes permettant de générer des applications Entity Framework.

Voir aussi

Autres ressources

ADO.NET Entity Framework