首页 > 解决方案 > 合并 context.ObjectStateManager.GetObjectStateEntries 中的更改

问题描述

我想在 EF (4/.net 4.8) 中记录对我的数据源的某些更改。我已注册到ObjectContext.SavingChanges事件并从ObjectStateManager.GetObjectStateEntry方法中获取更改

private static void ContextSavingChanges(object sender, EventArgs e)
{

LogChanges((ObjectContext)sender).ObjectStateManager
.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified));

}

到目前为止,LogChanges 方法工作正常,并从GetObjectStateEntries

在一些更新方法中,我首先将所有相关元素删除到一个对象,然后读取当前元素(一些有更改),如下所示:

public void UpdateElements(Guid id, List<element> elements)
{


    var myObject = repo.GetMyEntities((SomeObject e) => e.id == id);
    var elementIds = elements?.Select(e => e.ElementId).ToList() ?? new List<Guid>();

    foreach (var element in myObject.Elements)
    {

        repo.RemoveEntity(element);
    }

    if (elements != null)
    {
        foreach (var element in elements)
        {
            repo.AddEntity(new Element
            {
                id = element.id,
                value = element.value
            });
        }
    }
    repo.commitChanges();
}

两者都在调用添加AddEntity和删除。RemoveEntitySystem.Data.Entity.DbSet

一切正常。我实现了这样的 updateElement 方法,因为我可以在一种方法中添加/更新/删除元素。

“问题”是GetObjectStateEntries似乎检测到添加和删除操作的更改,即使它是相同的元素而没有任何更改。EF“本机”检测并将这些情况合并为一个更改(或零)是否有任何可能性,还是我必须自己处理?

我只是好奇我是否遗漏了什么。

谢谢和亲切的问候

标签: c#.netentity-framework-4

解决方案


推荐阅读