2017-03-16 1 views
0

내가 하나로, OData로 시작하는 초보자 해요, 나는 다음과 같은 개체에 대한 중 하나로, OData API를 정의한를 생성 Client 엔티티의 Navigation Property와 Order 엔티티의 네비게이션 속성은 Attribute Routing API를 사용하여 컨트롤러의 모델을 검증하기 때문에 "required"로 주석 처리됩니다.중 하나로, OData 게시 요청은 새로운 탐색 속성

(삽입) (데이터베이스에 이미) ID 1과 클라이언트의 새로운 주문을 게시, 내 중 하나로, OData 엔드 포인트에 본문에 다음과 같은 JSON 객체로 POST 요청을 보내 :

{ 
    "Date": "2017-03-16T08:28:47.700Z", 
    "Client": { 
    "Id": 1 
    }, 
    "Comment": "Something" 
} 

가 나는 다음과 같은 오류 메시지가 나타납니다

{ 
    "error": { 
    "code": "", 
    "message": "The request is invalid.", 
    "innererror": { 
     "message": "Order.Client.Name : Das Feld \"Name\" ist erforderlich.\r\n", 
     "type": "", 
     "stacktrace": "" 
    } 
    } 
} 

가 영어로 번역을, 그것은 개체의 클라이언트에 대한 필드 이름이 필수임을 의미한다.

첫 번째 질문 : 모든 필드와 함께 게시 요청의 탐색 속성을 나타내는 전체 개체를 보내지 않고 Odata에서 탐색 속성 (fk)이있는 엔터티를 게시/삽입하려면 어떻게해야합니까? 탐색 속성에 대해 ID/기본 키만 보내는 것은 불가능합니까?

요청에 탐색 속성으로 사용 된 전체 엔터티를 보내면 주문이 데이터베이스에 만들어 지지만 이상한 일이 발생합니다. 탐색 속성 "클라이언트"가 무시되고 동일한 이름을 가진 새 클라이언트 이 삽입 된 엔티티에 대해 생성되었습니다 ...

즉, 주문이 테이블에 생성되지만 주문에 대한 client_id는 제공된 이름을 사용하여 새 클라이언트가 생성되었으므로 1이 아닙니다. 하지만 이드는 무시당했습니다.

내가 뭘 잘못하고있어?

미리 감사드립니다.

답변

1

고객 주문 키를 주문에 추가하고 게시하십시오. 여기에는 클라이언트가 이미 있고 주문에 클라이언트가 하나만 있다고 가정합니다.

+0

그러나 clientId는 이미 게시 된 json 개체에 있습니다. 그렇지 않습니까? :에스. 그리고 귀하의 가정은 정확하고 클라이언트는 존재하며 주문은 오직 하나의 클라이언트를 가질 수 있습니다 ... –

+0

odata가 주문과 클라이언트를 게시 (생성)하려고 시도하는 게시를하고 있습니다. 게시물은 사용자가 제공 한 모든 키를 무시하고 새 클라이언트를 삽입합니다. 그냥 순서에 클라이언트 외래 키를 추가하십시오. '[ForeignKey ("Client")] 공개 문자열 ClientId {get; 세트; } public virtual Client Client {get; 세트; } –

+0

[ASP.NET 웹 API 2.2를 사용하는 OData v4의 엔티티 관계] (https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet) -web-api/odata-v4/엔티티 관계 - odata-v4) –