【问题标题】:How to do a server-side Insert/Update (Upsert) from Silverlight RIA services如何从 Silverlight RIA 服务执行服务器端插入/更新 (Upsert)
【发布时间】:2010-09-23 11:04:12
【问题描述】:

虽然 RIA 服务似乎非常适合表操作和查询,但我仍停留在一种传统的更新情况上。 UPSERT(如果存在则更新,否则插入新的):

首先:如果记录不存在,我想在服务器端添加记录,否则如果它已经存在,我想更新其当前字段值之一。

第二:我不想从客户端查询数据库,看看记录是否存在。我只想在 RIA 服务上调用“UpsertData”方法,并且只在服务器端进行添加或更新。

我尝试了很多选项,最接近我使用的是 [Update(UsingCustomMethod = true)] 方法,传递一个新创建的(因此分离的)实体。当用我的对象调用该方法时,我得到: "无法在分离实体上调用自定义方法。"

我们将不胜感激提供最佳方法的建议 :)

【问题讨论】:

    标签: silverlight silverlight-4.0 entity-framework-4 wcf-ria-services


    【解决方案1】:

    好的,我有一个解决方案。我不确定这是否是正确的方法,因此将等待您的好自己的确认。

    基本上我会覆盖默认的 RIA 服务插入方法并使其执行现有记录检查(与任何其他业务规则检查一样):

    做Upsert的客户端代码:

    • 创建域上下文
    • 创建一个可能已经存在的新条目
    • 将新项目添加到域上下文(到相应的表)
    • 提交更改(有效地请求插入 1 条记录)。

    服务器端代码:

    • 替换现有的InsertTypeX(TypeX object)方法。
    • 让 InsertTypeX 方法检查现有记录。
    • 如果存在现有记录,请更新该记录上的必填字段。
    • 如果记录不存在,请使用 AddObject 将对象添加到 EF 表中。

    现在看起来很简单,但也许有更好的方法来做到这一点。仍然欢迎 cmets 和建议。

    【讨论】:

    • 这正是我推荐的方法。域服务向导生成的代码旨在成为您使用特定于您的应用程序的逻辑进行自定义的起点。
    • @Kyle McClellan:感谢您的确认。我越深入,它就越清晰(首先要走出最初的迷雾:))
    【解决方案2】:

    我只是在存储过程中创建了一个 MERGE 语句,然后映射函数导入以不返回任何内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多