Delta< T>可以用于复杂的对象图,而不是单个对象?我试过没有成功使用它,我想知道我是否遗漏了某些东西,或者是否功能根本不受支持.
例如,这是一个模型:
public class Person {
public int Id { get;set; }
public string Name { get;s set; }
public Address Address { get; set; }
}
public class Address {
public string Street { get; set; }
public string City { get; set; }
public string PostCode { get; set; }
}
这是OData模型构建:
var builder = new ODataConventionModelBuilder();
builder.ComplexType<Address>();
builder.EntitySet<Person>("Person");
对于我的控制器的POST方法,我可以使用这个JSON,它将被反序列化:
{
"Name": "Mr Smith",
"Address": {
"Street": "Some Street",
"City": "Some City",
"PostCode": "Some PostCode"
}
}
但是,当我使用PATCH时会出现问题.如果我寄这个:
{
"Name": "Mr Doe",
"Address": {
"Street": "Another Street"
}
}
我的控制器方法签名如下所示:
public IHttpActionResult Patch([FromODataUri] key, Delta<Person> delta) { ... }
然后delta将包含一个Address属性,City和PostCode为null,Street为“Another Street”.这似乎对我来说是正确的.
然后,当我使用delta.Patch(person)将更改应用于person对象时,它会将此地址批量复制到此人,而不仅仅是更新地址的Street属性.
我错过了什么,或修补了Delta< T>不支持的复杂类型属性?
最佳答案 这是目前的行为.复杂类型属性(OData中的结构属性之一)在更新实体时被视为一个单元.
但是,Web API有问题(Support PATCH to a complex type)来跟踪此问题.