对复杂对象使用 Delta<T>
Using Delta<T> with complex objects
Delta 可以用于复杂的对象图,而不是单个对象吗?我尝试使用它但没有成功,我想知道我是否遗漏了什么或者功能是否不受支持。
例如,这是一个模型:
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) { ... }
然后增量将包含一个地址 属性,城市和邮政编码为空,街道为 "Another Street"。这对我来说似乎是正确的。
然后,当我使用 delta.Patch(person) 将更改应用到 person 对象时,它会将此地址批量复制给该人,而不是仅仅更新地址的 Street 属性。
我是不是遗漏了什么,或者 Delta 不支持复杂类型属性的修补?
这是当前的行为。复杂类型 属性,OData 中的结构 属性 之一,在更新实体时被视为一个单元。
但是,Web API 有问题 (Support PATCH to a complex type) 来跟踪这个问题。
Delta
例如,这是一个模型:
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) { ... }
然后增量将包含一个地址 属性,城市和邮政编码为空,街道为 "Another Street"。这对我来说似乎是正确的。
然后,当我使用 delta.Patch(person) 将更改应用到 person 对象时,它会将此地址批量复制给该人,而不是仅仅更新地址的 Street 属性。
我是不是遗漏了什么,或者 Delta
这是当前的行为。复杂类型 属性,OData 中的结构 属性 之一,在更新实体时被视为一个单元。
但是,Web API 有问题 (Support PATCH to a complex type) 来跟踪这个问题。