我有下表:
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不能为空。有一个简单的方法,只有请求中指定的列更新?我是否必须先选择受影响的行才能完成缺失值(出于性能原因我不想要这样做)?我也不想将未受影响的列存储在客户端的隐藏字段中,只是为了让更新生效。我正在使用带有EF4的EFOracleProvider。
任何想法?
答案 0 :(得分:2)
您需要使用MERGE而不是PUT。 PUT语义是“覆盖”。因此,它首先将所有属性清除为其默认值(默认值由提供程序定义)。然后它应用您在请求中发送的属性。 MERGE语义是“合并”。它不会清除属性,只会应用您在请求中发送的属性。