【问题标题】:EF4 Self Tracking EntitiesEF4 自我跟踪实体
【发布时间】:2011-03-14 17:07:39
【问题描述】:

我目前正在尝试在 n 层场景中使用 STE。我有一个 WCF 服务,它允许我检索对象图和/或更新对象以及允许我编辑该图的各个方面并将更改提交回服务的客户端 (WPF) 应用程序。

我的问题是这样的;我检索到的对象图非常大——有时包括图像——但我的更新很少。但是,当我提交更新时,由于对象之间的关系,整个图表会被提交回服务。

例如;给定客户/订单/订单详情场景:我检索客户及其订单和相关订单详情(3 个级别)。然后我更新一个 OrderDetail 来改变数量。我通过 WCF 方法提交要更新的 OrderDetail,该方法采用 OrderDetail 对象,但序列化遵循通过 Order 到 Customer 的关系属性,不仅序列化更改后的 OrderDetail,还序列化所有 Orders、OrderDetails 和客户。

当服务调用参数被序列化时,我怎样才能阻止所有这些被传回,而只是传回要更新的对象而不遵循关系?

我可以为 STE 找到的所有示例(仍然不多)似乎旨在实际传递所有相关对象(例如在线博客/帖子示例)。

【问题讨论】:

    标签: wcf entity-framework-4 self-tracking-entities n-tier-architecture


    【解决方案1】:

    如您所知,ObjectStateManager 管理对象状态,尤其是在 n 绑定应用程序上,要更新特定对象,请使用以下方法:

    1. 先将其附加到上下文中
    2. ChangeObjectState - 接受 EntityState 的枚举:已添加/已修改/已删除
    3. 保存更改

    查看链接:http://msdn.microsoft.com/en-us/magazine/ee321569.aspx

    【讨论】:

      【解决方案2】:

      如果您不希望传递所有数据,则必须使用较小的数据集。因此,如果您默认检索客户 + 所有订单 + 所有订单详细信息,那么它就是您的工作集。如果您只想使用单个订单创建操作来获取该订单及其详细信息。

      它在某种程度上与聚合根有关。订单是订单项目的聚合根,因为使用没有订单的单个项目没有太大意义。但是在没有客户的情况下与 Order 合作是可能的,不是吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-24
        • 1970-01-01
        • 1970-01-01
        • 2011-01-21
        相关资源
        最近更新 更多