2015-01-15 2 views
4

델타 <T>은 단일 객체가 아닌 복잡한 객체 그래프와 함께 사용할 수 있습니까? 내가 성공하지 않고 그것을 사용하려고 노력하고 뭔가를 놓치고 있는지 또는 기능이 단순히 지원되지 않는지 궁금해하고있다. 예를 들어델타 <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 모델 건물의 내 컨트롤러의 POST 방법에 대한

var builder = new ODataConventionModelBuilder(); 
builder.ComplexType<Address>(); 
builder.EntitySet<Person>("Person"); 

, 나는이 JSON을 사용할 수 있으며 직렬화 복원됩니다 고급 :

{ 
    "Name": "Mr Smith", 
    "Address": { 
    "Street": "Some Street", 
    "City": "Some City", 
    "PostCode": "Some PostCode" 
    } 
} 

그러나 패치를 사용할 때 문제가 발생합니다. 나는이를 보낼 경우 :

{ 
    "Name": "Mr Doe", 
    "Address": { 
    "Street": "Another Street" 
    } 
} 

그리고 내 컨트롤러 메소드 서명은 다음과 같습니다

public IHttpActionResult Patch([FromODataUri] key, Delta<Person> delta) { ... } 

그리고 거리에 대한 도시에 대한 널 (null) 및 우편 번호와 "또 다른 거리"과 주소 속성을 포함 델타, . 이것은 나에게 맞는 것 같다.

다음으로 사람 개체에 변경 사항을 적용하기 위해 delta.Patch (person)를 사용하면 주소의 Street 속성을 업데이트하는 대신이 주소를 도매인에게 도매로 복사합니다.

델타가 지원하지 않는 복잡한 유형의 속성이 누락되었거나 패치 되었습니까? <T>?

답변

2

그게 현재의 행동입니다. OData의 구조적 속성 중 하나 인 복잡한 형식 속성은 엔터티를 업데이트 할 때 단위로 처리됩니다.

그러나 웹 API에는이 문제를 추적하는 데 문제가 있습니다 (Support PATCH to a complex type).

+0

문제 상태에 따르면 지금 수정 된 것 같습니다. – HappyNomad