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

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01