すべての子テーブルを別の親テーブルに再割り当てする方法を考え出そうとしています。現在、データベースと対話するために 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;
}