Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GraphDiff重复返回的实体_C#_Entity Framework_Graphdiff - Fatal编程技术网

C# GraphDiff重复返回的实体

C# GraphDiff重复返回的实体,c#,entity-framework,graphdiff,C#,Entity Framework,Graphdiff,我正在使用GraphDiff更新复杂的对象图。我的主实体有多个子实体,可以创建、更新或删除(graphDiff中的OwnedCollections)。因此,在GraphDiff中,当一个实体被更新时,将创建该实体的另一个副本,您必须获取该副本才能获取新创建实体的ID等。 但我遇到了以下问题:当我向子集合添加实体时,返回的“母亲”实体有两个相同的子集合。我已经下载了代码,CollectionGraphNode中的以下代码似乎导致了问题: private object AddElement<T

我正在使用GraphDiff更新复杂的对象图。我的主实体有多个子实体,可以创建、更新或删除(graphDiff中的OwnedCollections)。因此,在GraphDiff中,当一个实体被更新时,将创建该实体的另一个副本,您必须获取该副本才能获取新创建实体的ID等。 但我遇到了以下问题:当我向子集合添加实体时,返回的“母亲”实体有两个相同的子集合。我已经下载了代码,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;
}
private object AddElement(IChangeTracker changeTracker、IEntityManager entityManager、T existing、object updateItem、object dbCollection)
{
//我的注释:输入参数dbCollection包含现有子实体
如果(!\u已拥有)
{
updateItem=changeTracker.AttachAndReloadAssociatedEntity(updateItem);
}
else if(changeTracker.GetItemState(updateItem)==EntityState.Distached)
{
var instance=entityManager.CreateEmptyEntityWithKey(updateItem);
//我的评论:这里的dbCollection有现有子级(例如1)
changeTracker.AddItem(实例);
UpdateItem(UpdateItem,实例);
//我的评论:这里的dbCollection有+1(2)
foreach(成员中的var childMember)
{
Update(changeTracker、entityManager、instance、updateItem);
}   
updateItem=实例;
}
dbCollection.GetType().GetMethod(“Add”).Invoke(dbCollection,new[]{updateItem});
//我的评论:这里的dbCollection再次具有+1,因此是我的新实体的两倍
如果(_拥有)
{
changeTracker.AttachCyclicNavigationProperty(现有、updateItem、GetMappedNavigationProperties());
}  
返回updateItem;
}

我知道我的问题非常具体,但GraphDiff是我最后的希望,我将能够以一种简洁的方式更新我的对象。我的EF不是很好,我试图理解上面两行代码是如何在列表中两次添加我的实体的。我的子实体引用了父实体,这会导致额外的添加吗?有没有人遇到过类似的问题?您是如何解决的?

我不熟悉graphdiff,但这听起来像是两个对象都以级联模式保存。尝试将子对象添加到父对象,然后仅保存父对象。您好,如果您提供问题的小副本,我将查看它。请打开一个包含复制的问题。感谢@andyp的快速响应。我在github上创建了一个问题。谢谢。