0

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

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

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

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

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

4

1 回答 1

1

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

于 2010-01-30T00:16:14.190 回答