1

複雑なオブジェクト グラフを更新するために 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 回追加する方法を理解しようとしています。私の子エンティティは親への参照を持っていますが、余分な追加が発生する可能性はありますか? 誰かが同様の問題を抱えていて、どのように解決しましたか?

4

0 に答える 0