如何从Silverlight RIA服务执行服务器端插入/更新(Upsert)

时间:2010-09-23 11:04:13

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

虽然RIA服务似乎非常适合桌面操作&查询,我被困在一个传统的更新情况。 UPSERT (如果存在则更新,否则插入新):

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

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

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

建议最好的方法来做到这一点,我们将不胜感激:)

2 个答案:

答案 0 :(得分:2)

好的,我有一个解决方案。我不确定这是否是正确的方法,所以等待你的好自己的确认。

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

要进行Upsert的客户端代码:

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

服务器端代码:

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

现在看起来很简单,但也许有更好的方法来做到这一点。仍然可以提出意见和建议。

答案 1 :(得分:0)

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