Silverlight RIA:RIA 不会忽略模型上的服务器端扩展属性

发布于 2024-09-30 17:31:38 字数 1035 浏览 3 评论 0原文

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

伪代码模式

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

对于我的客户,我需要在 UI 中看到一个普通名称,而不是 [UserID] 数字 所以我们需要将字段/属性 [UserID] 中的数字转换为可读的 [用户名]。

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

pseudo-code-mode

Partial Class Memo
  UserName  [string]
End Class

所以现在我们有了一个包含 UserID 和 UserName 的完整类(对于像这样的情况非常有用)您使用绑定到数据网格)

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

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

由于此属性是扩展属性,并且我不想跟踪 UserName 的更改,因此我想:让我们添加 [Ignore] 属性,但不要添加骰子。 DomainService 持续跟踪用户名更改。我也尝试了[IgnoreDataMember]属性,没有Dice。 [排除] 属性不起作用,因为此后它不再投影到客户端。

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

In my SilverLight app I have a simple entity-model containing one table: [Memo].
The memo table definition/class layout:

pseudo-code-mode

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

For my client I need to see a normal name, and not a [UserID] number in the UI
so we need to translate that number in field/property [UserID] to a readable
[UserName].

to accomplish that we'll extend the [Memo] Class SERVER-SIDE with this:

pseudo-code-mode

Partial Class Memo
  UserName  [string]
End Class

So now we have one complete class containing both the UserID and the UserName (Very usefull for like when you use binding to a datagrid)

At the CLIENT-SIDE we have a cached list of users, so at the CLIENT-SIDE we'll fill the UserName property after the EntitySet has been uploaded to the client. This is where my problem occurs: After setting the property, the Entity object is tracked as being changed by the DomainService engine (DomainContext.HasChanges = true).

So when loading a datagrid with 100 records, all records are tagged changed because of setting the UserName property in the client, and after editing 1 record, all 100 records are posted back to the server as being 'changed' instead of just 1 record.

Since this property is an extension property and I do not want to track changes for the UserName, I thought: Lets add the [Ignore] attribute, but no dice. The DomainService keeps tracking the UserName changes. I also tried the [IgnoreDataMember] attribute, no Dice. The [Exclude] attribute does not work, since then it's no longer projected to the client-side.

So I need to be able to reset the DomainService's object tracking state after loading and extending the data from database. Another solution is to extend the data at the server-side, but this is not an option for now.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

微凉 2024-10-07 17:31:38

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

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

If your new property is only required client-side, then add your Partial class extension to the client side. Not to the server side.

We often add new helper properties (like Fullname, which returns LastName+FirstName) to our Client-side RIA services project.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文