Salut,
Je cherche à extraire le nom du membre d'une classe de l'Entity Framework qui sert de clef primaire à des fins d'automatisation de génération de code.
Quelqu'un sait si c'est jouable ?
D'avance merci
Laurent
Salut,
Je cherche à extraire le nom du membre d'une classe de l'Entity Framework qui sert de clef primaire à des fins d'automatisation de génération de code.
Quelqu'un sait si c'est jouable ?
D'avance merci
Laurent
Tu veux faire quoi exactement ?
L'ideal c'est de te baser sur le CSDL ou SSDL en fonction du niveau auquel tu veux placer ton générateur de code.
Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.
Bonnes pratiques pour les accès aux données
Débogage efficace en .NET
LINQ to Objects : l'envers du décor
Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter
si tu regardes dans le fichier .designer.cs généré pour ton EDM, sur les propriétés clés tu as cet attribut :
Donc il suffit de rechercher les propriétés qui ont cet attribut avec EntityKeyProperty = true :
Code : Sélectionner tout - Visualiser dans une fenêtre à part global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 var keyProperties = from prop in typeof(MyEntity).GetProperties() let attr = Attribute.GetCustomAttribute(prop, typeof(EdmScalarPropertyAttribute)) as EdmScalarPropertyAttribute where attr != null && attr.EntityKeyProperty select prop;
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
Oui c'est une solution mais baser un générateur de code sur un code généré à partir d'un modèle (généré aussi), ça me semble tordu.
L'avantage de l'XML c'est que tu as le modèle de base, pas une représentation déjà retravaillée.
My 2 cts.
Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.
Bonnes pratiques pour les accès aux données
Débogage efficace en .NET
LINQ to Objects : l'envers du décor
Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
Salut,
Je vais en parler à mon client pour connaitre son sentiment sur la meilleure solution à prendre.
Pour ma part je serais pour l'analyse de l'XML mais il est vrai que la solution objet m'a l'air super simple et très élégante.
Merci et à bientôt
Laurent
Re,
On a finalement opté pour MetadataWorkspace
On peut sortir lstKeys en une seule requête linq / object ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 List<string> lstKeys = new List<string>(); var query = from meta in _context.MetadataWorkspace.GetItems(DataSpace.CSpace) where meta.BuiltInTypeKind == BuiltInTypeKind.EntityType select (meta as EntityType) ; foreach (EntityType ety in query) { if (ety.Name == strEntityName) { foreach(EdmMember edm in ety.KeyMembers){ lstKeys.Add(edm.Name); } } }
Merci
Laurent
Ah, ben ça m'a l'air tout propre comme solution
Bon à savoir en tous cas, je n'avais jamais utilisé MetadataWorkspace...
Essaie comme ça :On peut sortir lstKeys en une seule requête linq / object ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 List<string> query = (from meta in _context.MetadataWorkspace.GetItems(DataSpace.CSpace) let ety = meta as EntityType where meta.BuiltInTypeKind == BuiltInTypeKind.EntityType && ety != null && ety.Name = strEntityName select ety).SelectMany(ety => ety.KeyMembers, km => km.Name).ToList() ;
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
Bon va vraiment falloir que je me mette au linq plus sérieusement...
Bon d'un autre côté je suis vieux... Mais est-ce recevable comme excuse ?
Partager