Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Abonnements

EDM mapping quelques possibilités

Mike Taulty vient présenter, via son blog, un certain nombre de manipulation qu'il est possible de faire avec EDM.

J'ai plus ou moins parler de tout lors des Techdays. Cependant, le point 8, mapper plusieurs tables sur une même entité, est assez différent de la présentation que j'ai effectuée vu que dans son exemple, Mike Taulty prend deux tables identiques.

Ce point, avec ceux que j'ai présenté aux Techdays (je vais bientôt publier un article pour récapituler tout ça), montre un des intérêts majeurs d'EDM : réduire considérablement l'impact des modifs de la base sur le code.

Imaginons qu'on ait une table Cars et que pour des raisons de performances, le DBA décide d'éclater sa table en deux tables NewCars et OldCars, il va être possible, comme le montre Mike Taulty de n'associer qu'une seule entité à ces deux tables. Par conséquent, il va bien entendu falloir modifier la description de la base (ssdl) et le mapping (msl) mais il ne sera pas nécessaire de modifier la description des entités (csdl) sauf pour éventuellement rajouter une propriété IsOld et donc le code existant (qui se base sur les entités) continuera de fonctionner.

J'aimerais revenir sur le mapping de Mike Taulty. En principe, les conditions s'appliquent sur les colonnes de la base non mappées (à l'exeption des conditions Is Not Null pour lesquelles, il faut mapper la colonne). En revanche, dans le cas présent, le mapping se fait sur une propriété de l'entité non mappée (cela n'est pas possible avec la version actuelle du designer, il faut le faire à la main). Le fait d'avoir fait cela va modifier la requête sql. Par exemple, context.Cars va générer la requête SQL suivante :

SELECT
 [UnionAll1].[id] AS [C1],
 [UnionAll1].[manufacturer] AS [C2],
 [UnionAll1].[type] AS [C3],
 CASE WHEN ([UnionAll1].[C1] = 1) THEN cast(1 as bit) ELSE cast(0 as bit) END AS [C4]
FROM  (SELECT
 [Extent1].[id] AS [id],
 [Extent1].[manufacturer] AS [manufacturer],
 [Extent1].[type] AS [type],
 cast(0 as bit) AS [C1]
 FROM [dbo].[newCars] AS [Extent1]
UNION ALL
 SELECT
 [Extent2].[id] AS [id],
 [Extent2].[make] AS [make],
 [Extent2].[model] AS [model],
 cast(1 as bit) AS [C1]
 FROM [dbo].[oldCars] AS [Extent2]) AS [UnionAll1]

Cela signifie aussi que même si la propriété isOld n'est pas mappée sur une colonne, elle sera magré tout renseignée par la base.

Au niveau de la requête SQL, vous aurez sûrement remarqué le

CASE WHEN ([UnionAll1].[C1] = 1) THEN cast(1 as bit) ELSE cast(0 as bit) END AS [C4]

pourrais simplement être remplacé par

([UnionAll1].[C1] AS [C4].

L'ADO .Net team est consciente qu'il reste un certain nombre d'optimisations des requêtes SQL générées à intégrer avant la sortie finale.

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Publié vendredi 15 février 2008 07:30 par Matthieu MEZIL

Commentaires

# re: EDM mapping quelques possibilités @ samedi 16 février 2008 02:20

Sauf que l'exemple de Mike Taulty ne marche pas...

En effet, en se mappant sur deux tables tel qu'il l'a fait, il y a le risque d'avoir deux entités avec la même clé. D'ailleurs si vous exécutez l'exemple, vous aurez le résultat suivant :

1, ford, focus, False

1, ford, focus, False

Pourtant la requête générée retourne bien

1 ford focus 0

1 ford capri 1

Cependant, vu que la clé est la même, l'EF ne va pas recharger une deuxième fois l'entité, d'où le résultat (2 fois le même résultat).

Donc dans ce cas là, le minimum serait de mettre la colonne id en uniqueidentifier (Guid en .net).

Matthieu MEZIL

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Les actualités de la semaine sur c2i.fr (14 mai - 20 mai) par Richard Clark le il y a 5 heures et 1 minutes

- Reactive Extensions : Consommer des services avec Rx Partie 3, les pièges à éviter par Léonard Labat le il y a 14 heures et 6 minutes

- SharePoint Blog Site, problème d’archives par Le Blog (Vert) d'Arnaud JUND le 05-20-2012, 13:09

- Soirée ALT.NET Mai - 3 présentations par #Rui le 05-18-2012, 11:59

- [ #SharePoint 2010][ #SQLServer 2012] AlwaysOn pour SharePoint (2/4) : Configuration (2e partie)… par Le blog de Patrick [MVP SharePoint] le 05-18-2012, 11:31

- Team Foundation Server 11: tous les trésors cachés du site d’équipe par Philess le 05-16-2012, 19:01

- [PowerShell 3] Télécharger et installer la documentation en ligne par Blog de SPBrouillet (Pierrick BROUILLET) le 05-16-2012, 17:36

- [#SharePoint 2010][#SQLServer 2012] AlwaysOn pour SharePoint (1/4) : Configuration (1ère partie)… par Le blog de Patrick [MVP SharePoint] le 05-16-2012, 12:10

- Job Day @MIC Brussels - .Net Developers on Mobile applications par Le Blog (Vert) d'Arnaud JUND le 05-15-2012, 20:26

- [SharePoint 2010] – SharePoint 2010, Windows (Server) 8 et des erreurs IIS sont dans une VM… par Blog de SPBrouillet (Pierrick BROUILLET) le 05-14-2012, 12:10