代码之家  ›  专栏  ›  技术社区  ›  iCollect.it Ltd

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

  •  1
  • iCollect.it Ltd  · 技术社区  · 14 年前

    (如果存在则更新,否则插入新内容):

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

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

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

    2 回复  |  直到 14 年前
        1
  •  2
  •   iCollect.it Ltd    14 年前

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

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

    要执行Upsert的客户端代码:

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

    服务器端代码:

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

        2
  •  0
  •   BentOnCoding    14 年前

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