Lire des métadonnées de clé étrangère par programmation avec Entity Framework 4

Quelqu’un sait-il comment obtenir des informations de schéma à partir d’un Entity Framework généré par edmx?

Plus précisément, je veux réussir à parcourir la clé étrangère pour une entité dont je ne dispose pas actuellement d’instance et obtenir les relations de clé étrangère, et je souhaite le faire par reflection d’une manière qui sera appliquée de manière générique à tout type de fichier. classe d’entité sans code personnalisé à chaque fois.

EG: Mon schéma a 2 classes, Utilisateur et Groupe. J’ai le numéro “42” que je connais qui provient de la propriété “GroupId” d’une entité “Utilisateur”, mais pour le moment je ne peux pas trouver comment détecter que cette propriété “GroupId” des clés étrangères “Utilisateur” l’entité “Group” par sa propriété “GroupId”.

Vous pouvez utiliser l’approche suivante –

foreach (EntityType entity in ItemCollection.GetItems().OrderBy(e => e.Name)) foreach (var entityMember in entity.NavigationProperties) foreach (System.Data.Metadata.Edm.EdmProperty foreignKey in entityMember.GetDependentProperties()) { //... use foreignKey } 

Nous avons fini par trouver la solution à cela. Les informations pertinentes se trouvent dans la propriété RelationshipManager du contexte. En appelant GetAllRelatedEnds() , puis en recherchant ceux de type AssociationSet .

Le ElementType d’ ElementType de l’ensemble d’associations contient alors une propriété IsForeignKey ainsi qu’un tableau ReferentialConstraints qui possède des propriétés pour chaque contrainte, ToProperty ToRole , ToProperty , FromRole et FromProperty , et le RelationshipMultiplicity sur le ToRole / FromRole peut être utilisé pour déterminer la direction de la clé étrangère. relation.

En prenant toutes ces données et en utilisant la méthode GetObjectByKey du contexte, j’ai été en mesure de parcourir par programmation les relations de clé étrangère définies pour un contexte sans avoir l’entité associée.