【问题标题】:RIA services presentation model with 1-many or many-many relationships具有一对多或多对多关系的 RIA 服务表示模型
【发布时间】:2010-01-28 06:03:52
【问题描述】:

我正在尝试获得一个在 RIA 中工作的演示模型(讨论过 herehere)。我能找到的所有示例都是简单的平面数据实体,没有 1-many 或 many-many 关系,这是我无法使用的 - 特别是在更新和插入关联关系时。

查询我可以正常工作 - 我用关联属性(和包括属性,在适当的情况下)标记了我的演示类,并且我对如何将数据加载到客户端并作为实体在那里维护有很好的理解。我还插入了新实体。但是,我遇到了以下问题。对于以下示例,假设我们有简单的专辑和艺术家实体,其中专辑有一个艺术家,而艺术家可以有零到多个专辑。两者都有一个 Name 属性。

  • 在客户端,如果我执行 myArtist.Albums.Add(anAlbum) 或 myArtist.Albums.Remove(anAlbum),则没有任何反应。 HasChanges 返回 false。 (请注意,myArtist 和 anAlbum 仅在代码中通过加载实体并迭代以获取对特定实体的引用而获得:我还没有在 UI 或 DomainDataSources 中做任何事情,只是在闲逛)。
  • 如果我更新了 Artist 和 SubmitChanges 上的 Name,当在服务器上调用 Update 方法时,Album 集合为空。

有没有人有任何建议,或者你能指出一个使用更复杂对象的例子吗?

编辑(为后代保留上述内容):好吧,似乎存在第二个问题(对实体的引用或在服务器上调用 Update 时显示为 null 的实体集合)因为子实体没有被标记为已更改,因此它们没有被序列化和发回。我知道您可以通过使用 [Composition] 来强制实现这一点,并且我已经让它以这种方式工作,但这不是组合关系,我希望两个实体都是“顶级”实体。如何将实体标记为已更改?

【问题讨论】:

    标签: wcf-ria-services presentation-model


    【解决方案1】:

    问题是我的 [Association] 属性没有正确定义。我没有意识到关联的 Name 属性在关联的两侧必须相同。当名称相同并且您进行构建时,客户端上生成的代码对“父”使用的 EntityCollection 使用不同的构造函数来引用“子”,而不是在关联设置不正确时.当您在集合上调用 Add 和 Remove 时,新的构造函数会采用回调来进行一些额外处理 - 具体来说,它们会采用您正在添加或删除的子实体并修改其上引用其父实体的属性,以便一切都保持不变同步:您从中删除对象的集合、您将其添加到的集合以及对象对其父对象的引用。

    【讨论】:

      猜你喜欢
      • 2014-05-16
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 2015-07-15
      • 2018-06-15
      • 2021-04-01
      相关资源
      最近更新 更多