我使用实体框架急切加载方法,因为我必须为客户端提供整个层次结构。
在回来的路上,我可以看到上下文中的对象与客户端返回的对象相同(我假设上下文是使用该对象更新的,尽管它不管理条目状态)。
问题#1 -
我是否必须从数据库中带出“旧”实体并开始比较? (击中数据库......)
问题#2 -
我已经阅读了Slauma在Entity framework, problems updating related objects讨论中给出的解决方案。
你真的必须做两个对象之间的所有比较逻辑吗?
问题#2.1 -
你不能避免像
// Update subFoos that are in the newFoo.SubFoo collection
context.Entry(dbSubFoo).CurrentValues.SetValues(newSubFoo);
该代码表明,编写和维护是一场噩梦
我真的很感激这种情况的建议。
可能不会优雅但最不合理的东西。
答案 0 :(得分:2)
我希望它会帮助别人。
以下项目(还有nuget包)为图形更新提供了优雅的方式
即使在复杂的情况下它也能很好地工作。
Github:
https://github.com/refactorthis/GraphDiff
的NuGet:
http://www.nuget.org/packages/RefactorThis.GraphDiff/
另一种选择是在对象级别实现IComparable,并在更新逻辑中使用它与DB中的实体进行比较。