实体框架 - 反思外键和关系/关联

pba*_*nis 5 .net reflection entity-framework foreign-keys foreign-key-relationship

我有一个具有挑战性的问题,我想在我的Entity Framework映射上使用反射来查找引用表的所有外键,并且我想要作为外键的列的名称.

根据SO上的另一篇文章,我可以通过反射轻松找到桌面上的导航属性.但是这不会给我包含外键值的属性或列的名称.

我试图这样做的原因是我有大量的表(近40个)引用一个项目表.假设用户在名为"Andew"的项目表中输入新值,稍后管理员注意到它实际上只是已经存在的项目"Andrew"的拼写错误.现在我想找到所有对"Andew"的引用并将这些引用更改为"Andrew".我更愿意这样做有效,因此使用反向导航属性会太慢,因为您必须在修改它们之前加载值.我想要做的是能够反映表和列的列表,然后直接向数据库发出更新命令.它看起来像这样:

var command = String.Format("UPDATE [{0}] SET [{1}] = {{1}} WHERE [{1}] = {{0}}; ", fk.FromTableName, fk.FromColumnName);
dataContext.ExecuteStoreCommand(command, new Object[] { oldID, newID });
Run Code Online (Sandbox Code Playgroud)

在LINQ to SQL中,这实际上非常简单......在LINQ自动生成的代码上有20行反射,我已经完成了,但是我们最近切换到了EF,我无法通过EF找到外键列的名称.

我正在寻找的一个简化示例:如果我有一个名为Employee的对象,其中包含一个名为Manager的导航属性和一个ManagerID的外键,那么我想知道Manager是我的导航属性,底层存储是ManagerID属性.我想通过反射或元数据严格执行此操作,以便我可以从中构建一个动态查询.

pba*_*nis 0

问题的答案在另一篇文章中:使用 Entity Framework 4 以编程方式读取外键元数据

请注意,发帖人的答案对我不起作用。使用@Ashraf 的答案,效果很好。