gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:23:26 24 4
gpt4 key购买 nike

我有一个具有挑战性的问题,我想在我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com