.net - Entity Framework - 反射(reflect)外键和关系/关联

标签 .net entity-framework reflection foreign-keys foreign-key-relationship

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

根据 another post on SO ,我可以通过反射轻松找到表格上的导航属性。但这并没有给我包含外键值的属性或列的名称。

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

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

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

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

最佳答案

一旦您使用了链接问题中的想法进入 EntityType您感兴趣,请注意 EntityType继承自 EntityTypeBase ,它有一个属性 KeyMembers这是所有EdmMembers的集合参与实体的 key 。

每个EdmMember有一个 Name这将是字符串 "ManagerID"你寻求的。

关于.net - Entity Framework - 反射(reflect)外键和关系/关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8112531/

相关文章:

java - 如何使用反射在构造函数中创建具有参数的类的实例?

java - 反射中方法的参数数量未知

c# - .NET 服务是否表现出线程敏捷性?

c# - 不是从 App.Config 获取连接字符串吗?

asp.net-mvc - 至少包含 Entity Framework 中的所有内容

c# - 是否可以将 IQueryable<CatDTO> 映射到 IQueryable<CatEf>?

.net - 我应该使用我的安装程序部署 app.config 吗?

c# - 转义 sql 字符串的简单方法?

asp.net - WebForms 不显眼的验证模式

Java - 反射 - 如何使用反射获取@RequestHeader值