Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Matthieu MEZIL

I love .Net

Abonnements

Actualités

Locations of visitors to this page English blog
Locations of visitors to this blog
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

Classé sous : , , , , ,

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

- ssdl view et TPT par Matthieu MEZIL le 07-05-2008, 02:04

- L'injection SQL n'est PAS un problème QUE pour les développeurs web ! par CoqBlog le 07-05-2008, 01:08

- Un outil pour réaliser des animations WPF basées sur des équations de Bézier par Perspective le 07-04-2008, 21:45

- Sandcastle et CodePlex : le verdict par CoqBlog le 07-04-2008, 20:53

- ssdl view et TPH par Matthieu MEZIL le 07-04-2008, 19:12

- Webcasts sur le Parallel Framework disponibles par Matthieu MEZIL le 07-04-2008, 17:26

- [Silverlight] - Comprendre et Débuter avec Silverlight par Danuz le 07-04-2008, 12:41

- SharePoint : Nouvel article sur l'exportation et Importation de sites SharePoint par Blog Technique de Romelard Fabrice le 07-04-2008, 01:00

- ImagineCup 2008 Final in Paris: Day 1 par Richard Clark le 07-03-2008, 22:48

- PowerShell : Comment utiliser un ENUM .NET dans un script PowerShell par Blog Technique de Romelard Fabrice le 07-03-2008, 18:09