[Entity Framework] Continuer à utiliser un EDMX avec EF 4.1
19 Sep 2011 in Web DevelopmentLe titre de ce post vous a peut-être suppris puisque l’une des nouveautés la plus plébicitée de Entity Framework 4.1 est la possibilité de s’affranchir d’un modèle EDMX et d’adopter une stratégie Code First : les entités .NET permettent de générer le modèle de données SQL.
Pourtant, Entity Framework 4.1 apporte de nombreuses autres nouveautés, notamment en terme de gestion de l’état des entités, la mise à jour d’entités dans un contexte state-less (notamment), de requêtage… via des méthodes beaucoup plus simples que précédement.
Ce post à pour but d’expliquer comment utiliser Entity Framework 4.1 tout en continuant d’utiliser un EDMX et une stratégie Database First !
Importer la librairie Entity Framework 4.1
Pour pouvoir utiliser EF 4.1, le plus simple est de référencer le package NuGet associé. Faites un clic droit sur votre projet Visual Studio puis cliqué sur Manage NuGet packages…
:
Dans la fenêtre qui s’affiche, recherchez Entity Framework :
Cliquez sur Install
, acceptez les conditions. La librairie EntityFramework.dll va être téléchargée et référencée dans le projet.
Télécharger les templates de génération de code (T4) pour EF 4.1
Afin de générer le code propre à EF 4.1 (entités et DbContext) il est possible de télécharger un template d’item via le gestionnaire d’extension de Visual Studio. Placez-vous dans la galerie en ligne et recherchez DbContext :
Installez l’élément ADO.NET C# DbContext Generator
(ou VB si vous le souhaitez ).
Supprimer l’outil de génération de code de votre EDMX
Afin que le code ne soit plus généré par l’EDMX, éditez les propriétés de ce dernier et supprimer l’outil personnalisé :
Attention : ne faites pas celà dans un projet qui utilise les éléments de code généré par l’EDMX Entity Framework classique
.
Ajouter les templates au projet
Maintenant, ajoutez un nouvel item de type ADO.NET C# DbContext Generator
au projet.
Identifiez la ligne de code suivante dans chacun des templates et modifiez la chaine $edmxInputFile$ par le chemin relatif vers votre fichier EDMX.
Dès lors, lorsque vous enregistrez les templates, du code devrait être généré : les entités et le DbContext.
Et voilà, vous pouvez utilisez le contexte généré pour attaquer votre base de données !
using (var dbContext = new BlogContainer()) {
var posts = dbContext.Posts.Where(p => p.IsPublished).ToList();
return View(posts);
}
Après modification de l’EDMX, il suffit de regénérer les templates T4 pour les mettre à jour et de recompiler le tout
A bientôt