Présentation d’Entity Framework
Introduction
ADO.NET Entity Framework fournit un mappage sous la forme d’une couche d’abstraction pour obtenir un modèle d’objet basé sur une base de données référente. Les bases de données relationnelles et les langages orientés objets définissent les associations de différentes manières. Depuis la version 1.0 du Framework .NET, il est possible d’utiliser le type DataSet qui est très similaire à la structure d’une base de données puisqu’il contient des types DataTable, DataColumn, DataRow et DataRelation. Entity Framework apporte un concept différent : les entités sont définies indépendamment de la structure de la base de données. Celles-ci sont alors mappées avec les tables et les relations. Le mappage entre les objets et la structure de la base de données est réalisé au travers de trois couches : la couche logique, la couche conceptuelle et la couche de mappage. Un objet de type DbContext conserve l’état des entités et leurs modifications afin de savoir quand celles-ci doivent être répercutées sur la base de données.
Le mappage
L’Entity Framework utilise plusieurs couches pour réaliser un mappage entre les tables d’une base de données et des objets. Cela peut commencer à partir d’une base de données et utiliser les outils de Visual Studio pour créer le mappage ou, comme dans le chapitre Création du modèle de données, il est possible de commencer par les entités avec le concepteur de Visual Studio ou la technique du Code First pour ensuite générer la base de données correspondante.
1. La couche logique
La couche logique est définie par le SSDL (Store Schema Definition Language) et décrit la structure des tables et des relations de la base de données.
Ouvrez le fichier SelfMailer.edmx créé précédemment avec un éditeur XML pour analyser son contenu. La balise edmx:StorageModels contient la couche logique :
<!-- SSDL content -->
<edmx:StorageModels>
<Schema Namespace="SelfMailer.Store" Alias="Self"
Provider="System.Data.SqlClient" ProviderManifestToken="2012"
xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/
EntityStoreSchemaGenerator"
xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl">
<EntityContainer Name="SelfMailerStoreContainer">
...
</EntityContainer>
<EntityType Name="MailServers">
...
</EntityType>
<EntityType Name="Senders">
...
</EntityType>
<EntityType Name="MailServerSender">
...
</EntityType>
<Association Name="FK_MailServerSender_MailServer">
...
</Association>
<Association Name="FK_MailServerSender_Sender">
...
</Association>
</Schema>
</edmx:StorageModels>...
Travailler avec les entités
ADO.NET définit des types permettant de travailler avec les bases de données : DbConnection, DbCommand et DbParameter entre autres. Les classes de l’Entity Framework dérivent de ces classes de base avec notamment les classes : EntityConnection, EntityCommand et EntityParameter.
Le premier élément pour communiquer avec une base de données est de disposer d’une connexion. L’objet EntityConnection reçoit une chaîne de connexion et gère l’ouverture et la fermeture des connexions. Lors de la création du modèle de données, Visual Studio a stocké la chaîne de connexion dans le fichier de configuration de l’application App.config :
<connectionStrings>
<add name="SelfMailerContainer"
connectionString="metadata=
res://*/Entities.SelfMailer.csdl|
res://*/Entities.SelfMailer.ssdl|
res://*/Entities.SelfMailer.msl;
provider=System.Data.SqlClient;
provider connection string="
Data Source=.\SQLEXPRESS;
Initial Catalog=SelfMailer;
Integrated Security=True;
MultipleActiveResultSets=True;
App=EntityFramework"" ...