使用Entity Framework 4以编程方式读取外键元数据

有谁知道如何从edmx生成的entity framework中获取模式信息?

具体来说,我想设法遍历我当前没有实例的实体的外键,并获得它的外键关系,我希望通过reflection以一种通用方式应用于任何实例每次都没有自定义代码的实体类。

EG:我的架构有2个类,User和Group。 我知道数字“42”来自“用户”实体的“GroupId”属性,但目前我无法弄清楚如何检测“User”外键的“GroupId”属性“Group”实体由它的“GroupId”属性组成。

您可以使用以下方法 –

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 } 

结束了找到解决方案。 相关信息可以在上下文的RelationshipManager属性中找到。 通过调用GetAllRelatedEnds()然后找到类型为AssociationSet的那些。

然后,关联集的ElementType包含IsForeignKey属性以及分别具有每个约束ToRoleToPropertyFromRoleFromProperty属性的数组ReferentialConstraints ,并且ToRole / FromRole上的ToRole可用于确定外键的方向关系。

获取所有这些数据并使用上下文的GetObjectByKey方法,我能够以编程方式遍历为上下文定义的外键关系,而无需关联实体。