【问题标题】:Update a single field from a single entity with ria-services使用 ria-services 从单个实体更新单个字段
【发布时间】:2010-04-02 18:20:57
【问题描述】:

在某些情况下,我只想更新数据库中单个实体的特定字段。

我将该类型的实体加载到我的 silverlight 应用程序中, 而且我知道它们在服务器上不断变化......但是有一个领域 必须由 silverlight 客户端设置...服务器只会读取它。 我怎样才能将该字段的新数据发送到服务器?

以一个名为“TextField”的实体为例。 我在 silverlight 应用程序中加载了一个 TextField 列表 并且用户不时会更新 Preload (字符串)属性 一个实体,并且必须返回服务器而不更改服务器上的任何其他内容。

我尝试向 DomainService 添加一个简单的 SetPreloadText(...) 方法,但是 只是让 Silverlight 崩溃并出现一些奇怪的错误代码。

有办法解决吗?我在这里反对 Silverlight 的想法吗? 我真的不想发回整个对象,因为知道在任何给定时间客户端上的版本很可能已经过时了。 (这对于这个特定的应用程序来说是可以的)

【问题讨论】:

    标签: .net silverlight entity-framework wcf-ria-services


    【解决方案1】:

    我认为 SetPreloadText(..) 崩溃是因为 RIA 服务使用了特殊的命名约定,例如插入/更新/删除 crud,除非您指定将其命名为不同的名称。

    如果您只想更新一个特定的属性,因为其他的我没有改变。你应该看看

    this.Context.AttachAsModified(currentEntityWithAllTextFields, this.ChangeSet.GetOriginal(currentEntityWithAllTextFields));
    

    在您的更新方法中。有了这个,你可以准确地过滤掉改变了什么......

    希望这会有所帮助...

    【讨论】:

    • AttachAsModified 方法不可用...不在服务中,不在客户端,有什么想法吗?
    • 您使用的是 SL3 和 RIA 服务测试版,还是 SL4 和 RIA 服务 RC?如果您使用的是 RC,则 AttachAsModified 已移至实体集,因此它将 this.Context.TextFields.AttachAsModified
    【解决方案2】:

    现在你需要使用这个:

      this._yourENtitySet.Value.ApplyCurrentValues(modified); // The one you received
      this._yourENtitySet.Value.ApplyOriginalValues(original); /// The original one
    

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 2021-11-15
      相关资源
      最近更新 更多