Служба данных WCF - обновляйте запись, а не вставляйте ее - PullRequest
4 голосов
/ 26 апреля 2011

Я разрабатываю Службу данных WCF с самообследованием сущностей и хочу, чтобы клиенты не вставляли дублированный контент.Всякий раз, когда они отправляют данные POST без предоставления значения для ключа данных, я должен выполнить некоторую логику, чтобы определить, присутствуют ли эти данные в моей базе данных или нет.Я написал перехватчик изменений следующим образом:

[ChangeInterceptor("MyEntity")]
public void OnChangeEntity(MyEntity item, UpdateOperations operations){
  if (operations == UpdateOperations.Add)
  {
    // Here I search the database to see if a matching record exists.
    // If a record is found, I'd like to use its ID and basically change an insertion
    // into an update.
    item.EntityID = existingEntityID;
    item.MarkAsModified();
  }
}

Однако это не работает.СуществующийEntityID игнорируется, и в результате запись всегда вставляется, никогда не обновляется.Это вообще возможно сделать?Заранее спасибо.

1 Ответ

2 голосов
/ 27 апреля 2011

Ура! Мне удалось это сделать.

item.EntityID = existingEntityID;
this.CurrentDataSource.ObjectStateManager.ChangeObjectState(item, EntityState.Modified);

Мне пришлось изменить состояние объекта в другом месте, т.е. вызывая .ChangeObjectState объекта ObjectStateManager, который является свойством базового EntityContext. Я был введен в заблуждение методом .MarkAsModified (), который на данный момент не уверен, что он делает.

...