WCF DataService обновляет определенный столбец - PullRequest
1 голос
/ 29 июля 2010

У меня есть следующая таблица:

SomeName

ID number(8) not null,
Field1 varchar2(50) not null,
Field2 varchar2(50) not null,
Field3 varchar2(50) not null

В этой таблице у меня есть следующие строки:

ID,Field1,Field2,Field3
12,'text1','text2','text3'

Теперь я хочу обновить только field2 (с помощью запроса ajax):

HTTP PUT http://host/DataService/SomeName(12M)
Accept: application/json, text/javascript, */*
Content-Type: application/json; charset=utf-8
{ Field2: 'updated field 2' }

Я бы ожидал, что это будет означать:

update sometable 
set field2 = 'updated field 2' 
where id = '12'

но это не так. Вместо этого я получаю ошибку, которая говорит, что field1 и field3 не могут быть нулевыми. Есть ли простой способ обойти это, чтобы обновлялись только столбцы, указанные в запросе? Нужно ли сначала выбирать уязвимую строку, чтобы заполнить пропущенные значения (что я не хочу по причинам производительности)? Я также не хочу хранить незатронутые столбцы в скрытых полях на стороне клиента, просто чтобы обновление работало. Я использую EFOracleProvider с EF4.

Есть идеи?

1 Ответ

2 голосов
/ 29 июля 2010

Вам нужно использовать MERGE вместо PUT.Семантика PUT "перезаписана".Поэтому сначала он очищает все свойства до значений по умолчанию (по умолчанию определяется поставщиком).И тогда он применяет свойства, которые вы отправили в запросе.Семантины MERGE - это «слияние».Свойства не очищаются, а применяются только те, которые вы отправили в запросе.

...