【发布时间】:2015-11-09 05:35:40
【问题描述】:
对于我正在使用实体框架的项目,我希望能够枚举给定对象实例的所有导航属性(假设它是由 EF 生成的对象)。从那里我想为每个导航属性获取相关的 Id 属性。
例如,如果我得到一个类Person 的实例,我希望能够找到它的导航属性,称为Address 和Boss。对于这两个导航属性,我想“查找”名为 AddressId 和 BossId 的相关 Id 属性。
我需要这些 Id 属性,以便我可以在不同的数据库上运行查询,该数据库没有相同的外键但确实具有完全相同的 Id。
到目前为止,我已经找到了一种方法来获取 EF 生成的随机对象实例的 RelationshipManager。在调试时,我可以通过 Manager 的 Relationships 属性获得外键关系。但我只能得到导航属性名称。所以我可以看到有一个FK_Person_Address 与名为Address 的导航属性相关,但我找不到AddressId。
所以我的问题是,我怎样才能动态地(不知道Person 类的布局)发现与Address 相关的AddressId 属性?
我知道外键关系可能在关系的另一端具有 Id 属性(Boss 指向 Person 而不是 Person 具有 BossId)。在这种情况下,当我检查Person 的实例时,我仍然想发现Boss 有一个PersonId。
【问题讨论】:
-
你是先用代码生成表格吗?
-
不,数据库优先
-
你是在构建还是运行时想要这个?
-
由于模型在运行时不会改变,并且整个模型在编译时是已知的,所以构建或运行时都应该没问题。
标签: c# reflection entity-framework-6