使用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
属性以及分别具有每个约束ToRole
, ToProperty
, FromRole
和FromProperty
属性的数组ReferentialConstraints
,并且ToRole
/ FromRole
上的ToRole
可用于确定外键的方向关系。
获取所有这些数据并使用上下文的GetObjectByKey
方法,我能够以编程方式遍历为上下文定义的外键关系,而无需关联实体。