Как мне написать эту логику в сервисах Риа? - PullRequest
0 голосов
/ 05 марта 2011

Как мне написать эту логику в сервисах 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 Ответ

1 голос
/ 05 марта 2011

Нет причин, по которым вы не можете расширять методы вставки пластины котла, которые генерирует 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 ) );
    }
  }
}
...