Vue d’ensemble d’Entity Framework

Entity Framework est un ensemble de technologies 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 avoir à se préoccuper des tables et des colonnes de la base de données sous-jacente où ces données sont stockées. Avec Entity Framework, les développeurs peuvent travailler à un niveau supérieur d’abstraction lorsqu’ils traitent les données, et peuvent créer et maintenir des applications orientées données avec moins de code que dans les applications traditionnelles. Comme Entity Framework est un composant de .NET Framework, les applications Entity Framework peuvent s’exécuter sur n’importe quel ordinateur sur lequel .NET Framework 3.5 SP1 (ou version supérieure) est installé.

Donner vie aux modèles

La division de l'application ou du service en trois parties (modèle de domaine, modèle logique et modèle physique) constitue une approche de conception commune et utilisé de longue date pour la construction d'une application ou d'un service. Le modèle de domaine 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 de domaine 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 en permettant aux développeurs d’interroger les entités et les relations au sein du modèle de domaine (appelé modèle conceptuel dans Entity Framework) tout en s’appuyant sur Entity Framework pour traduire ces opérations en commandes spécifiques à la source de données. Cela libère les applications des dépendances codées en dur sur une source de données particulière.

Lorsque vous utilisez Code First, le modèle conceptuel est mappé au modèle de stockage dans le code. Entity Framework peut déduire le modèle conceptuel à partir des types d’objets et des configurations supplémentaires que vous définissez. Les métadonnées de mappage sont générées au moment de l'exécution selon une combinaison de la manière dont vous avez défini vos types de domaine et données de configuration supplémentaires que vous fournissez dans le code. Entity Framework génère la base de données nécessaire en fonction des métadonnées. Pour plus d’informations, consultez Création d’un modèle.

Lorsque vous utilisez Entity Data Model Tools, le modèle conceptuel, le modèle de stockage et les mappages entre les deux sont exprimés dans les schémas basés sur XML et sont définis dans les fichiers qui ont les extensions de nom correspondantes :

  • Le langage CSDL (Conceptual Schema Definition Language) définit le modèle conceptuel. CSDL est l’implémentation Entity Framework d’Entity Data Model. L’extension de fichier est .csdl.

  • Le langage SSDL (Store Schema Definition Language) définit le modèle de stockage, également appelé « modèle logique ». L’extension de fichier est .ssdl.

  • Le langage MSL (Mapping Specification Language) définit les mappages entre le modèle de stockage et le modèle conceptuel. L’extension de fichier est .msl.

Le modèle de stockage et les mappages peuvent être modifiés le cas échéant, sans besoin 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.

Entity Framework utilise ces fichiers de modèle et de mappage pour transformer les opérations de création, de lecture, de mise à jour et de suppression relatives aux entités et aux relations du modèle conceptuel en opérations équivalentes dans la source de données. Entity Framework prend même en charge le mappage d’entités du modèle conceptuel sur des procédures stockées de la source de données. Pour plus d’informations, consultez Spécifications CSDL, SSDL et MSL.

Mapper des objets sur 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 des tables de bases de données relationnelles, l'adéquation n'est pas parfaite. Plusieurs tables normalisées correspondent fréquemment à une seule classe, et les relations entre les classes sont souvent représentées différemment des relations entre les tables. Par exemple, pour représenter le client d'une commande, une classe Order peut utiliser une propriété qui contient une référence à une instance d'une classe Customer, tandis qu'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. Entity Framework donne aux développeurs la possibilité de représenter les relations de cette manière, ou de modéliser de façon plus précise les relations telles qu’elles sont représentées dans la base de données.

Les solutions existantes ont essayé de rétablir la continuité de ce qu'on appelle fréquemment « 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 les tables relationnelles, les colonnes et les contraintes de clé étrangère des modèles logiques sur les entités et les relations 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 Entity Data Model génèrent des classes de données extensibles basées sur le modèle conceptuel. Ces classes sont des classes partielles qui peuvent être étendues avec des membres supplémentaires que le développeur ajoute. Par défaut, les classes générées pour un modèle conceptuel particulier dérivent de classes de base qui fournissent des services de matérialisation d'entités sous forme d'objets, ainsi que de suivi et d'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 associations. Les développeurs peuvent également personnaliser les classes générées pour un modèle conceptuel. Pour plus d’informations, consultez Utilisation des objets.

Accéder aux données d’entité et les modifier

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. Entity Framework utilise les informations contenues dans le modèle et les fichiers de mappage pour traduire les requêtes d’objets relatives aux types d’entités 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 qu’Entity Framework gère. Entity Framework fournit les méthodes suivantes pour interroger un modèle conceptuel et renvoyer 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, consultez LINQ to Entities.

  • Entity SQL Dialecte SQL indépendant du stockage qui travaille directement avec les entités contenues dans le modèle conceptuel et qui prend en charge les concepts Entity Data Model. Entity SQL est utilisé à la fois avec les requêtes d’objets et les requêtes exécutées à l’aide du fournisseur EntityClient. Pour plus d’informations, consultez Vue d’ensemble d’Entity SQL.

Entity Framework inclut le fournisseur de données EntityClient. Ce fournisseur gère les connexions, traduit les requêtes d’entité en requêtes spécifiques à la source de données et renvoie un lecteur de données qu’Entity Framework utilise pour matérialiser les données d’entité en objets. Lorsque la matérialisation des objets n’est pas nécessaire, 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 SQL Entity et d’utiliser le lecteur de données en lecture seule renvoyé. Pour plus d’informations, consultez la page Fournisseur EntityClient pour Entity Framework.

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

Entity Framework Architectural Diagram

Les outils Entity Data Model peuvent générer une classe dérivée de System.Data.Objects.ObjectContext ou System.Data.Entity.DbContext 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.

Fournisseurs de données

Le fournisseur EntityClient étend le modèle de fournisseur ADO.NET en accédant aux données en termes d’entités et de relations conceptuelles. Il exécute les requêtes qui utilisent Entity SQL. Entity SQL fournit le langage de requête sous-jacent qui permet à EntityClient de communiquer avec la base de données. Pour plus d’informations, consultez la page Fournisseur EntityClient pour Entity Framework.

Entity Framework inclut un fournisseur de données SqlClient mis à jour qui prend en charge les arborescences de commandes canoniques. Pour plus d’informations, consultez SqlClient pour Entity Framework.

Outils Entity Data Model

Avec le runtime Entity Framework, Visual Studio inclut les outils de mappage et de modélisation. Pour plus d’informations, consultez Modélisation et mappage.

En savoir plus

Pour en savoir plus sur Entity Framework, consultez :

Prise en main : vous aide à vous mettre rapidement au travail à l’aide du guide de démarrage rapide, qui explique comment créer une application Entity Framework simple.

Terminologie Entity Framework : définit un grand nombre des termes introduits par Entity Data Model et Entity Framework et utilisés dans la documentation Entity Framework.

Ressources Entity Framework : fournit des liens vers des rubriques conceptuelles ainsi que des liens vers des rubriques et ressources externes permettant de générer des applications Entity Framework.

Voir aussi