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

fyj*_*ham 8 c# entity-framework-4

有谁知道如何从edmx生成的实体框架中获取架构信息?

具体来说,我要设法穿越了,我目前没有实例的实体的外键,并获得它的外键关系,我想通过反射在会一般适用于任何一种方式来做到这一点每次都没有自定义代码的实体类.

EG:我的架构有2个类,User和Group.我有数字"42",我知道,从"用户"实体"的GroupId"属性来了,但此刻我不能工作,如何检测到的"用户"外键本"的GroupId"属性"Group"实体由它的"GroupId"属性组成.

Ash*_*lam 23

您可以使用以下方法 -

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

  • 对于EF 6,您可以在[post]中看到我的答案(http://stackoverflow.com/questions/35001808/programmatically-obtain-foreign-keys-between-pocos-in-entity-framework-6/35002571#35002571 ) (3认同)
  • 非常好,谢谢!我不知道如何得到海报的工作答案,但你的第一次工作.也是代码示例的A +! (2认同)
  • 太棒了 尤其是因为在Google上查找这些内容的相关信息非常困难. (2认同)

fyj*_*ham 8

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

ElementType关联设置,那么的包含一个IsForeignKey属性,并且还阵列ReferentialConstraints,其具有的属性为每个约束ToRole,ToProperty,FromRoleFromProperty分别与RelationshipMultiplicityToRole/ FromRole可以被用来确定所述外键关系的方向.

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