Leggi i metadati della chiave esterna programmaticamente con Entity Framework 4

Qualcuno sa come si ottengono le informazioni sullo schema da un Entity Framework generato da EDMX?

Nello specifico voglio riuscire a superare la chiave esterna per un’entity framework che attualmente non ho un’istanza e ottenere le sue relazioni con le chiavi esterne, e voglio farlo via riflessione in un modo che verrà applicato genericamente a qualsiasi class di entity framework senza codice personalizzato ogni volta.

EG: Il mio schema ha 2 classi, User e Group. Ho il numero “42” che conosco proveniente dalla proprietà “GroupId” di un’entity framework “Utente”, ma al momento non riesco a capire come rilevare che questa proprietà “GroupId” delle chiavi esterne “Utente” l’ quadro “Gruppo” per la sua proprietà “GroupId”.

Puoi usare il seguente approccio:

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 } 

Finito per trovare la soluzione a questo. Le informazioni rilevanti possono essere trovate nella proprietà RelationshipManager del contesto. Chiamando GetAllRelatedEnds() e quindi trovando quelli del tipo AssociationSet .

Il ElementType del set di associazione contiene quindi una proprietà IsForeignKey e anche un array ReferentialConstraints che ha le proprietà per ciascun vincolo rispettivamente ToRole , ToProperty , FromRole e FromProperty e RelationshipMultiplicity su ToRole / FromRole per determinare la direzione della chiave esterna relazione.

Prendendo tutti questi dati e usando il metodo GetObjectByKey del contesto sono stato in grado di attraversare programmaticamente le relazioni di chiave esterna definite per un contesto senza avere l’entity framework associata.