我试图想出一种将所有子表重新分配给另一个父表的方法。我目前正在使用 EntityFramework 5 与我的数据库进行交互。虽然使用 EF 不一定有效率,但这种操作很少发生。
也就是说,使用 EntityFramework 对父对象进行基本更改是直截了当的:
objChild.Parent = objNewParent;
调用 SaveChanges() 时,外键会正确更新。
如何获取所有相关实体,以便遍历它们以分配新的父对象?我知道这需要反射,但到目前为止,我还无法拼凑出任何可用的东西。
我不关心性能。对数据库的调用次数、加载的数据总量、内存或 cpu 使用与此答案无关。它们的关键是不知道将出现哪些表的一般性质。
基本上,我正在尝试这样做,但针对所有相关记录,而不是单一类型:
var sourceParents = ParentRecords.Where(n => sourceIds.Contains(n.Id));
var targetParent = Participants.Find(targetId);
var childRecords = sourceParents.SelectMany(n => n.ChildRecords).ToArray();
foreach (var child in childRecords) {
child.ParentRecord = targetParent;
}