MISE à JOUR J'ai écrit mes conclusions à ce sujet dans un billet de blog:
http://www.ninjanye.co.uk/2011/06/getting-schema-information-from-edmx.html
http://jnye.co/Posts/3/getting-schema-information-from-an-edmx-file-with-poco
Je suis moi-même tombé sur ce même problème. Vous devez d'abord récupérer le EntityContainer du contenu modèle de stockage (edmx: StorageModels) section du fichier edmx
Au sommet du modèle tt (après la MetadataLoader est instancié et l'INPUTFILE est déclaré) ajoutez le code suivant pour obtenir le Modèle de stockage de contenu EntityContainer
StoreItemCollection sic;
loader.TryCreateStoreItemCollection(inputFile, out sic);
EntityContainer sicEntityContainer = sic.GetItems<EntityContainer>().First();
Ensuite, à partir du foreach (entité var dans ItemCollection.GetItems ...) boucle vous pouvez obtenir le schéma actuel avec les éléments suivants
EntitySet eset = sicEntityContainer.GetEntitySetByName(code.Escape(entity), true);
string schemaName = eset.MetadataProperties["Schema"].Value.ToString();
Remarque: Vous devrez peut-être répéter le code get schéma pour les propriétés ComplexType plus bas dans le modèle tt
Merci. Je n'ai pas travaillé sur cet ensemble de code depuis un certain temps, mais quand même, cette information est utile. – 37Stars
'code.Escape (entity)' devrait simplement être 'entity.Name' car Escape ajoutera' @ 'si le nom est un mot-clé. En outre, ce n'est pas infaillible parce que le nom que vous passez à 'GetEntitySetByName' vient de la section edmx: ConceptualModels, alors que vous essayez de rechercher un nom sous edmx: StorageModels. Ceux-ci ne sont pas nécessairement les mêmes et sont mappés sous la section de mappage "C-S". Malheureusement, il n'y a pas d'API facile à lire cette section (voir http://social.msdn.microsoft.com/Forums/en-US/d019e830-8d3c-4e66-8aec-14aa675caae0/dynamically-obtain-mapping-info). – nmclean