Partager via


Vue d’ensemble 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 ont eu du mal à atteindre deux objectifs très différents. Ils doivent modéliser les entités, les relations et la logique des problèmes métier 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 s’étendre sur plusieurs systèmes de stockage, chacun avec ses propres protocoles ; même les applications qui fonctionnent avec un système de stockage unique doivent équilibrer les exigences du système de stockage par rapport aux exigences d’écriture de code d’application efficace et gérable.

Entity Framework permet aux développeurs d’utiliser des données sous la forme d’objets et de propriétés spécifiques au domaine, tels que les clients et les adresses client, sans avoir à se soucier des tables et colonnes de base de données sous-jacentes où ces données sont stockées. Avec Entity Framework, les développeurs peuvent travailler à un niveau d’abstraction plus élevé lorsqu’ils traitent des données et peuvent créer et gérer des applications orientées données avec moins de code que dans les applications traditionnelles. Étant donné que Entity Framework est un composant du .NET Framework, les applications Entity Framework peuvent s’exécuter sur n’importe quel ordinateur sur lequel le .NET Framework à compter de la version 3.5 SP1 est installé.

Donner la vie aux modèles

Une approche de conception longue et courante lors de la création d’une application ou d’un service est la division de l’application ou du service en trois parties : un modèle de domaine, un modèle logique et un modèle physique. Le modèle de domaine définit les entités et les relations dans le système qui sont modélisées. 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 traite les 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 affiné par les administrateurs de base de données pour améliorer les performances, mais les programmeurs écrivant du code d’application se limitent principalement à travailler avec le modèle logique en écrivant des requêtes SQL et en appelant des procédures stockées. Les modèles de domaine sont généralement utilisés comme outil pour capturer et communiquer les exigences d’une application, fréquemment sous forme de diagrammes inertes qui sont consultés et abordés dans les premières phases d’un projet, puis abandonnés. De nombreuses équipes de développement ignorent la création d’un modèle conceptuel et commencent par spécifier 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 des entités et des relations dans le 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 en fonction des types d’objets et des configurations supplémentaires que vous définissez. Les métadonnées de mappage sont générées pendant l’exécution en fonction d’une combinaison de la façon dont vous avez défini vos types de domaine et des informations de configuration supplémentaires que vous fournissez dans le code. Entity Framework génère la base de données selon les besoins 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 des schémas XML et définis dans des fichiers qui ont des extensions de nom correspondantes :

  • Le langage CSDL (Conceptual Schema Definition Language) définit le modèle conceptuel. CSDL est l’implémentation d’Entity Framework du modèle de données d’entité. 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 de spécification de mappage (MSL) définit les mappages entre le stockage et les modèles conceptuels. L’extension de fichier est .msl.

Le modèle de stockage et les mappages peuvent changer selon les besoins sans nécessiter de modifications apportées au modèle conceptuel, aux classes de données ou au code d’application. Étant donné que les modèles de stockage sont spécifiques au fournisseur, vous pouvez utiliser 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 créer, lire, mettre à jour et supprimer des opérations sur des entités et des relations dans le modèle conceptuel à des opérations équivalentes dans la source de données. Entity Framework prend même en charge le mappage d’entités dans le modèle conceptuel aux procédures stockées dans la source de données. Pour plus d’informations, consultez CSDL, SSDL et MSL Specifications.

Associer des objets à des données

La programmation orientée objet pose un défi pour interagir avec les systèmes de stockage de données. Bien que l’organisation des classes reflète fréquemment l’organisation des tables de base de données relationnelles, l’ajustement n’est pas parfait. 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 pour une commande, une Order classe peut utiliser une propriété qui contient une référence à une instance d’une Customer classe, tandis qu’une Order ligne de table d’une base de données contient une colonne de clé étrangère (ou un ensemble de colonnes) avec une valeur qui correspond à une valeur de clé primaire dans la Customer table. Une Customer classe peut avoir une propriété nommée Orders qui contient une collection d’instances de la Order classe, tandis que la Customer table d’une base de données n’a pas de colonne comparable. Entity Framework offre aux développeurs la possibilité de représenter les relations de cette façon, ou de modéliser plus étroitement les relations telles qu’elles sont représentées dans la base de données.

Les solutions existantes ont essayé de combler cet écart, qui est fréquemment appelé « incompatibilité d’impedance », en mappant uniquement les classes et les propriétés orientées objet aux tables et colonnes relationnelles. Au lieu d’adopter cette approche traditionnelle, Entity Framework mappe les tables relationnelles, les colonnes et les contraintes de clé étrangère dans les modèles logiques aux entités et aux relations dans les modèles conceptuels. Cela permet une plus grande flexibilité dans la définition d’objets et l’optimisation du modèle logique. Les outils Entity Data Model 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. Par défaut, les classes générées pour un modèle conceptuel particulier dérivent des classes de base qui fournissent des services pour matérialiser des entités en tant qu’objets et pour le suivi et l’enregistrement des modifications. Les développeurs peuvent utiliser ces classes pour travailler avec les entités et les relations en tant qu’objets associé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 autre solution de mappage relationnel objet, Entity Framework est fondamentalement destiné à permettre aux applications d’accéder aux données représentées sous forme d’entités et de relations dans le modèle conceptuel. Entity Framework utilise des informations dans le modèle et les fichiers de mappage pour traduire des requêtes d’objet par rapport 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 de la requête sont matérialisés dans des objets que Entity Framework gère. Entity Framework fournit les méthodes suivantes pour interroger un modèle conceptuel et retourner des objets :

  • LINQ to Entities Fournit la prise en charge de LINQ (Language-Integrated Query) pour l’interrogation des types d’entités définis dans un modèle conceptuel. Pour plus d’informations, consultez LINQ to Entities.

  • Entity SQL. Dialecte indépendant du stockage de SQL qui fonctionne directement avec des entités dans le modèle conceptuel et qui prend en charge les concepts du modèle de données d’entité. Entity SQL est utilisé à la fois avec les requêtes d’objet et les requêtes exécutées à l’aide du fournisseur EntityClient. Pour plus d’informations, consultez Entity SQL Overview.

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

Le diagramme suivant illustre l’architecture Entity Framework pour accéder aux données :

Schéma architectural d’Entity Framework

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 dans le modèle conceptuel. Ce contexte d’objet fournit les fonctionnalités de suivi des modifications et de gestion des identités, de la concurrence et des relations. Cette classe expose également une SaveChanges méthode qui écrit des insertions, des mises à jour et des suppressions dans la source de données. Comme les requêtes, ces modifications sont effectuées par des commandes générées automatiquement par le système ou par des procédures stockées spécifiées par le développeur.

Fournisseurs de données

Le EntityClient fournisseur é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 des 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 de modèle de données d’entité

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.

Pour en savoir plus

Pour en savoir plus sur Entity Framework, consultez :

Prise en main : fournit des informations sur la mise en route et l’exécution rapide à l’aide du guide de démarrage rapide, qui montre comment créer une application Entity Framework simple.

Terminologie Entity Framework : définit la plupart des termes introduits par le modèle de données d’entité 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 externes et des ressources pour la création d’applications Entity Framework.

Voir aussi