gesegnet Wenn Sie das Entity Frameworks Metadaten verwenden möchten, müssen Sie durch die MetadataWorkspace
gehen suchen, die die ObjectContext
hängt ab.
Der Ausgangspunkt ist, den EntityType für Ihren Basistyp zu erhalten, in Ihrem Fall Kontakt.
Ich habe ein EF tips series und in Tip 13 ich eine Erweiterungsmethode auf MetadataWorkspace
zeigen, dass die EntityType
für eine bestimmte CLR-Typ bekommt:
public static EntityType GetCSpaceEntityType<T>(
this MetadataWorkspace workspace);
Sie können dies wie folgt verwenden:
var contactEntity = ctx.MetadataWorkspace.GetCSpaceEntityType<Contact>();
Einmal Sie haben dies können Sie sehen, es ist NavigationProperties, um die Beziehung und die Namen, die Sie interessiert sind einschließlich:
heißt
foreach(var np in contactEntity.NavigationProperties)
{
Console.WriteLine("Include: {0}", np.Name);
Console.WriteLine("... Recursively include ");
EntityType relatedType =
(np.ToEndMember.TypeUsage.EdmType as RefType).ElementType;
//TODO: go repeat the same process... i.e. look at the relatedTypes
// navProps too until you decide to stop.
}
Natürlich, wie Sie entscheiden, was Sie wollen, Sie können bis zu Ihnen ist. this helps
Alex
Ich denke, aber Reflektion ist sehr teuer. – Vitalik
Nicht wirklich. Es ändert sich nie, also müssen Sie es nur einmal tun. Machen Sie es zu einer Klasse statische Eigenschaft. Es wird in Mikrosekunden initialisiert und Sie müssen es nie wieder tun. –
Ich habe eine bessere sehr dynamische Lösung mit Ausdruck Bäumen, siehe meine Antwort: http: // Stackoverflow.com/questions/683960/how-to-avoid-hardcoded-Feldnamen-in-entity-framework/3433134 # 3433134 – Shimmy