1

在我的 SilverLight 应用程序中,我有一个简单的实体模型,其中包含一个表:[Memo]。备忘录表定义/类布局:

伪代码模式

Partial Class Memo
  ID      [int autonumbering]
  Memo    [string]
  UserID  [int]
End Class

对于我的客户,我需要在 UI 中看到一个普通名称,而不是 [UserID] 编号,因此我们需要将字段/属性 [UserID] 中的该编号转换为可读的 [UserName]。

为了实现这一点,我们将使用以下方法扩展 [Memo] 类 SERVER-SIDE:

伪代码模式

Partial Class Memo
  UserName  [string]
End Class

所以现在我们有了一个包含 UserID 和 UserName 的完整类(当您使用绑定到数据网格时非常有用)

在 CLIENT-SIDE,我们有一个缓存的用户列表,因此在 CLIENT-SIDE,我们将在 EntitySet 上传到客户端后填充 UserName 属性。这就是我的问题出现的地方:设置属性后,实体对象被跟踪为被 DomainService 引擎更改(DomainContext.HasChanges = true)。

因此,当加载具有 100 条记录的数据网格时,由于在客户端中设置了 UserName 属性,所有记录都被标记为已更改,并且在编辑 1 条记录后,所有 100 条记录都将作为“已更改”而不是 1 条记录发回服务器。

由于这个属性是一个扩展属性,我不想跟踪用户名的变化,我想:让我们添加 [Ignore] 属性,但不要骰子。DomainService 不断跟踪用户名的变化。我还尝试了 [IgnoreDataMember] 属性,没有 Dice。[Exclude] 属性不起作用,从那时起它不再投射到客户端。

所以我需要能够在从数据库加载和扩展数据后重置DomainService 的对象跟踪状态。另一种解决方案是在服务器端扩展数据,但目前这不是一个选项。

4

1 回答 1

1

如果您的新属性仅在客户端需要,则将您的 Partial 类扩展添加到客户端。不是服务器端。

我们经常向我们的客户端 RIA 服务项目添加新的辅助属性(如 Fullname,它返回 LastName+FirstName)。

于 2010-11-04T11:29:23.027 回答