【问题标题】:Entity Framework aggregate root update实体框架聚合根更新
【发布时间】:2014-01-01 14:07:36
【问题描述】:

我使用实体框架急切加载方法,因为我必须向客户端提供整个层次结构。
在回来的路上,我可以看到上下文中的对象与客户端返回的对象相同(我假设上下文是用该对象更新的,尽管它不管理条目状态)。
问题 #1 -
我是否必须从数据库中获取“旧”实体并开始比较? (对 db 的打击...)
问题 #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);

代码表明编写和维护是一场噩梦。
对于这种情况,我非常感谢您的建议。
可能不会优雅但最不合理的东西。

【问题讨论】:

  • 您正在开发什么样的应用程序?您可以在客户端使用实体时将实体附加到上下文吗?
  • 是web,对象来回序列化为json。上下文不会...

标签: entity-framework aggregate


【解决方案1】:

我希望它会对某人有所帮助。
以下项目(也有 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 并在更新逻辑中使用它来与数据库中的实体进行比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多