複雑なオブジェクト グラフを更新するために GraphDiff を使用しています。私の主なエンティティには、作成、更新、または削除される可能性のある複数の子があります (graphDiff の所有コレクション)。したがって、GraphDiff では、エンティティが更新されると、エンティティの別のコピーが作成され、新しく作成されたエンティティの ID などを取得するには、このコピーを取得する必要があります。次の問題が発生しました。子コレクション、返された「母」エンティティには同じ子が2回あります。コードをダウンロードしましたが、CollectionGraphNode の次のコードが問題を引き起こしているようです:
private object AddElement<T>(IChangeTracker changeTracker, IEntityManager entityManager, T existing, object updateItem, object dbCollection)
{
// My comment: input parameter dbCollection contains the existing child Entities
if (!_isOwned)
{
updateItem = changeTracker.AttachAndReloadAssociatedEntity(updateItem);
}
else if (changeTracker.GetItemState(updateItem) == EntityState.Detached)
{
var instance = entityManager.CreateEmptyEntityWithKey(updateItem);
// My comment: dbCollection here has existing children (e.g.1)
changeTracker.AddItem(instance);
changeTracker.UpdateItem(updateItem, instance);
//My comment: dbCollection here has +1 (2)
foreach (var childMember in Members)
{
childMember.Update(changeTracker, entityManager, instance, updateItem);
}
updateItem = instance;
}
dbCollection.GetType().GetMethod("Add").Invoke(dbCollection, new[] {updateItem});
//My comment: dbCollection here has again +1 and thus twice my new entity
if (_isOwned)
{
changeTracker.AttachCyclicNavigationProperty(existing, updateItem, GetMappedNaviationProperties());
}
return updateItem;
}
私の質問が非常に具体的であることは承知していますが、GraphDiff は、オブジェクトを適切に更新できるという私の最後の希望です。私は EF が苦手で、上記の 2 行のコードが私のエンティティをリストに 2 回追加する方法を理解しようとしています。私の子エンティティは親への参照を持っていますが、余分な追加が発生する可能性はありますか? 誰かが同様の問題を抱えていて、どのように解決しましたか?