实体框架聚合根更新

时间:2014-01-01 14:07:36

标签: entity-framework aggregate

我使用实体框架急切加载方法,因为我必须为客户端提供整个层次结构。
在回来的路上,我可以看到上下文中的对象与客户端返回的对象相同(我假设上下文是使用该对象更新的,尽管它不管理条目状态)。
问题#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);

该代码表明,编写和维护是一场噩梦 我真的很感激这种情况的建议。
可能不会优雅但最不合理的东西。

1 个答案:

答案 0 :(得分:2)

我希望它会帮助别人。
以下项目(还有nuget包)为图形更新提供了优雅的方式 即使在复杂的情况下它也能很好地工作。

Github:
https://github.com/refactorthis/GraphDiff

示例:
http://blog.brentmckendrick.com/introducing-graphdiff-for-entity-framework-code-first-allowing-automated-updates-of-a-graph-of-detached-entities/

的NuGet:
http://www.nuget.org/packages/RefactorThis.GraphDiff/

另一种选择是在对象级别实现IComparable,并在更新逻辑中使用它与DB中的实体进行比较。