Entity framework : premiers pas#

L'ADO.NET Entity Framework est un outil de mapping OR. Il nous permet d'avoir une transposition de notre base de données en modèle objet et de manipuler directement ce modèle au lieu de la base de données.

 

Intérêts

-         L'ADO.NET Entity Framework va nous générer automatiquement la couche d'accès aux données sans aucun effort ce qui nous permettra de nous concentrer sur les autres couches.

-         Cette couche va nous épargner toute la partie : j’ouvre une connexion à la base de données, je fais une requête sql, j’exécute la requête…

-         On a une transposition objet de notre base de données, on peut donc manipuler ces données avec du c# et surtout avec linq et tous les avantages de l’utilisation de linq (requête compilée, intellicence, …).

Générer le modèle à partir du wizard

Pour commencer il faut créer un projet de type ClassLibrary et le nommer.

 


Positionner vous sur le projet et click droit -> Add -> New Item. Dans « Visual C# Items », cliquer sur l'élément « ADO.NET Entity Data Model », renommez le en ce que vous voulez (eviter les caractères spéciaux et les tirets bas). Cliquer sur « Add ».

 

 

Cliquer sur l'élément « Generate from database »et cliquer sur « Next »

 

 

Choisir la connexion à la base de données qu'on veut utiliser, nommer la ConnectionString (toujours éviter les caractères spéciaux, ...) et cliquer sur Next.

 

Choisir les tables qu'on veut utiliser en cochant les checkbox correspondants, nommer le Model Namespace et cliquer sur finish.

 

 

Voici le résultat de la génération

Une fois qu'on a généré le modèle, il faut le préparer pour qu'on puisse l'utiliser.

Configuration du modèle

La première chose à faire c'est de compiler le projet contenant le .dbml.

 

Pour pouvoir utiliser le modèle il faut exporter les fichiers .csdl .msl .ssdl vers le projet qui voudra instancier le modèle. La façon la plus simple de les exporter de couche en couche est de les inclure dans la dll du projet contenant. Mais avant de le faire ouvrez le App.config et regardez la connectionString.

 

Pour inclure ces fichiers dans la dll il faut aller ouvrir le .dbml, click droit n'importe sur l'espace de travail -> Propiétés. Dans la propriété « Metadata Artifact Processing » séléctionner « Embed in output assembly ». Au passage vous remarquerez que la connectionString a changé de forme.

Compiler le projet. Voilà maintenant votre modèle est prêt à être utilisé.

 

Utilisation

Pour utiliser le modèle, il faut tout d'abord ajouter une référence au projet contenant le modèle et aussi à l'assembly System.Data.Entity. Ensuite, si on est dans le projet utilisateur final (Projet application web, projet de test, ...) on doit copier / coller la ConnectionString dans le App.Config ou Web.Config. Enfin écrire un using du namespace du modèle et using System.Data.Entity

 

Pour mon exemple ci-dessus :

 

using ActionnaireEntrepriseModele;

using System.Data.Entity;

 

Et c'est tout. On peut maintenant charger le modèle en écrivant :

 

Entities entities = new Entities();

 

on peut après ecrire des requête linq comme celle-ci :

 

var requete = from actionnaire in entities.Actionnaire

                        where actionnaire.id == id

                        select actionnaire;

 

Saturday, August 16, 2008 3:14:49 PM (Romance Standard Time, UTC+01:00) #    Comments [0]  | 

 

Jointure avec plusieurs conditions dans linq to entities#

Voici un petit problème auquel je me suis confronté dernièrement, je voulais tout simplement faire une requête linq contenant une jointure avec plusieurs conditions.

 

Prenons comme exemple les types d'entités suivants :

Je voudrais ecrire une requête linq qui me renvoie tous les employés de l'entreprise “NetGame”.

Pour ce faire je vais ecrire une jointure entre les 2 types d'entité “Entreprise” et “Employe”, cette jointure aura deux conditions :

-         la première est  employe.Entreprise.id doit correspondre à Entreprise.id

-         la deuxième est que entreprise.raisonSociale doit être égal à "NetGame"

 

Pour pouvoir mettre deux conditions dans une jointure, on doit créer dynamiquement 2 objets anonymes (new) chacun ayant comme propriétés les opérandes qui doivent composer les conditions séparés par une virgule, la comparaison va donc se faire sur les objets.

 

Soit “entities” est une instance de ObjectContext, voici la requête :

 

 var requete = from employe in entities.Employe

                       join entreprise in entities.Entreprise on

                                 new { idEntreprise = employe.Entreprise.id, raisonSociale = "NetGame" }

                      equals new { idEntreprise = entreprise.id, raisonSociale = entreprise.raisonSociale }

                      select employe;            

Friday, August 01, 2008 5:40:38 AM (Romance Standard Time, UTC+01:00) #    Comments [0]  | 

 

All content © 2012, Zied Nemili