Le Post Infeeny

Les articles des consultants et experts Infeeny

Entity Framework, générer ses entités dans une assembly séparée en Database first

Pourquoi séparer ses entités ?

Depuis la version 5 d’Entity Framework il est possible de générer des entités POCO (Plain Old CLR Object) avec une approche « Database First ». C’est-à-dire qu’elles n’héritent plus de la classe “ObjectContext” comme dans les versions antérieures. Elles sont libres de toute logique de persistance et ne contiennent que de la logique métier simple.
Dans nos architectures techniques, les POCO sont souvent utilisés de façon transverse et permettent d’assurer un couplage faible entre nos composants. Ils servent principalement à transférer les données métiers entre les différentes couches de l’application.

Il est donc intéressant de maintenir ses entités dans leurs propres assembly, bien isolées de l’implémentation de la persistance (souvent des repositories). Le fichier edmx qui décrit comment le modèle objet est mappé avec le modèle physique de la base de données restera quant à lui avec l’implémentation de la couche de persistance, puisqu’il génère le DbContext permettant d’interagir avec la base de données.

Passons à la pratique et voyons comment générer les entités dans une assembly différente de l’edmx.

Procédure

Après avoir créé un edmx, nous retrouvons un fichier « *Model.tt » dans l’arbre de l’explorateur de solution :

ModelTemplate

Ce fichier est le template T4 qui génère les classes des entités à partir du modèle décrit dans l’edmx.

Vous pouvez déplacer le fichier « *Model.tt » dans le projet de l’assembly qui contiendra les POCOs. Si vous n’y arrivez pas directement depuis l’explorateur de solution de Visual Studio, vous pouvez déplacer le fichier avec l’explorateur Windows puis réintégrer le fichier dans le projet.

Après l’opération, vous devriez avoir ceci :

Deplacement_ModelTemplate

Maintenant que le template T4 se trouve au bon endroit, nous devons modifier la référence vers l’edmx pour qu’il puisse générer les POCOs de votre modèle. Pour cela, vous devez modifier la ligne 5 dans le fichier « *Model.tt » :

<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@   output extension=".cs"#><#

const string inputFile = @"..\..\Shop.Dal\ShopModel.edmx";
var textTransform = DynamicTextTransformation.Create(this);

N’oubliez pas de référencer l’assembly contenant les POCOs sur le projet de l’edmx afin qu’il puisse compiler.

Si le projet ne compile pas, c’est sûrement qu’il manque un « using » dans le fichier « *.Context.tt ». Vous pouvez l’ajouter à la ligne 46 comme ci-dessous :

using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using Entities = Shop.Business.Entity;

La procédure est maintenant terminée, néanmoins n’oubliez pas qu’après la mise à jour de votre edmx, il vous faudra déclencher manuellement la génération de vos POCOs en exécutant « Run custom tool » après un clic droit sur le fichier « *Model.tt ».

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :