c# - 合并 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
和删除。RemoveEntity
System.Data.Entity.DbSet
一切正常。我实现了这样的 updateElement 方法,因为我可以在一种方法中添加/更新/删除元素。
“问题”是GetObjectStateEntries
似乎检测到添加和删除操作的更改,即使它是相同的元素而没有任何更改。EF“本机”检测并将这些情况合并为一个更改(或零)是否有任何可能性,还是我必须自己处理?
我只是好奇我是否遗漏了什么。
谢谢和亲切的问候
解决方案
推荐阅读
- php - Eclipse Php:变量未定义,即使它是在require_once php文件中定义的
- php - firstOrCreate() 不插入和更新
- macos - 您没有 /Library/Ruby/Gems/2.3.0 目录的写入权限。(mac用户)
- angular - 如何为角度 2 中的展开和折叠切换应用颜色
- javascript - 如何在 Firebase Cloud 函数中执行“添加子项”事件?
- rest - Symfony REST 分页
- c# - 有没有办法更改以 Base-Style 定义的 ControlTemplate 的特定属性,而无需复制粘贴整个代码?
- vba - 用于在同一工作簿中的不同工作表上进行 Vlookup 的 VBA 代码
- c# - Azure Web App - 多个应用程序托管 - 访问 Web API,但它显示来自 Web App 的 web.config 的错误
- c++ - 如何根据输入分配变量类型?