我如何在ria服务中编写这个逻辑?

时间:2011-03-05 14:43:14

标签: silverlight silverlight-4.0 wcf-ria-services

我如何在ria服务中编写此逻辑?在哪个地方?

sql的伪代码是: -

If exists (select recordid from table where recordid = @recordId)
    update the record
else
   insert the record.

RIA服务提供标准的CRUD模式。我必须使用Invoke吗?如果我使用Invoke,我将无法获得RIA服务提供的好处,如更改跟踪等。使用Invoke意味着使用RIA服务,如WCF服务。

提前致谢:)

1 个答案:

答案 0 :(得分:1)

没有理由不能扩展RIA使用您自己的语义生成的样板插入方法。下面的代码我把它放在一起作为一个快速的方法来做你想要的方法。

我建议你确保这条路线不会引起你的问题。我观察到客户端RIA在执行操作后往往在其上下文中有一些对象。

希望这有帮助。

public void InsertFoo ( Foo foo )
{
  using ( FooEntities db = new FooEntities() )
  {
    var fooRecord = db.Foos.Where( a => a.fooId == foo.fooId ).SingleOrDefault();

    if (fooRecord.Any())
    {
      // Insert
      if ( ( foo.EntityState != EntityState.Detached ) )
        this.ObjectContext.ObjectStateManager.ChangeObjectState( foo, EntityState.Added );
      else
        this.ObjectContext.SystemAccounts.AddObject( foo );
    }
    else
    {
      // Update
      fooRecord.Field = foo.Field;
      db.SaveChanges();

      this.ObjectContext.SystemAccounts.AttachAsModified( foo, this.ChangeSet.GetOriginal( foo ) );
    }
  }
}