2014-05-15 4 views
0

네비게이션 속성이 내 odata 결과에 반영되지 않지만 그 속성에 값을 할당하려고합니다. 여기에 코드가 있습니다.네비게이션 속성이 반영되지 않음

for (var x = 1; x <= 5; x++) 
      { 
       var mainEntity = new EdmEntityObject(entityType); 
       mainEntity.TrySetPropertyValue("Id", "AllKey" + x.ToString()); 
       mainEntity.TrySetPropertyValue("UserName", "AccountId" + x.ToString()); 
       mainEntity.TrySetPropertyValue("EmailAddress", "[email protected]" + x.ToString()); 
       mainEntity.TrySetPropertyValue("FirstName", "FirstName" + x.ToString()); 
       mainEntity.TrySetPropertyValue("LastName", "LastName" + x.ToString()); 
       mainEntity.TrySetPropertyValue("Custom", "Custom" + x.ToString()); 
       mainEntity.TrySetPropertyValue("[BasicProperty]Id", "[BasicProperty]Id" + x.ToString()); 

       IEdmEntityTypeReference categoryType = entityType.FindNavigationProperty("UserLogin").Type.AsEntity(); 

       var mainEntity2 = new EdmEntityObject(categoryType); 
       mainEntity2.TrySetPropertyValue("Id", "AllKey" + x.ToString()); 
       mainEntity2.TrySetPropertyValue("UserName", "AccountId" + x.ToString()); 
       mainEntity2.TrySetPropertyValue("EmailAddress", "[email protected]" + x.ToString()); 
       mainEntity2.TrySetPropertyValue("FirstName", "FirstName" + x.ToString()); 
       mainEntity2.TrySetPropertyValue("LastName", "LastName" + x.ToString()); 

       mainEntity.TrySetPropertyValue("UserLogin", mainEntity2);      

       collectionProduct.Add(mainEntity); 
      } 

결과는 다음과 같습니다.

{ 

"@odata.context": "http://localhost/WebApi/enwisen/User_Entity/$metadata#User_Entity", 
"value": [ 
    { 
     "UserName": "AccountId1", 
     "EmailAddress": "[email protected]", 
     "Id": "AllKey1", 
     "FirstName": "FirstName1", 
     "LastName": "LastName1", 
     "Custom": "Custom1" 
    }, 
    { 
     "UserName": "AccountId2", 
     "EmailAddress": "[email protected]", 
     "Id": "AllKey2", 
     "FirstName": "FirstName2", 
     "LastName": "LastName2", 
     "Custom": "Custom2" 
    }, 
    { 
     "UserName": "AccountId3", 
     "EmailAddress": "[email protected]", 
     "Id": "AllKey3", 
     "FirstName": "FirstName3", 
     "LastName": "LastName3", 
     "Custom": "Custom3" 
    }, 
    { 
     "UserName": "AccountId4", 
     "EmailAddress": "[email protected]", 
     "Id": "AllKey4", 
     "FirstName": "FirstName4", 
     "LastName": "LastName4", 
     "Custom": "Custom4" 
    }, 
    { 
     "UserName": "AccountId5", 
     "EmailAddress": "[email protected]", 
     "Id": "AllKey5", 
     "FirstName": "FirstName5", 
     "LastName": "LastName5", 
     "Custom": "Custom5" 
    } 
] 

} 

는 여기에 내가 탐색 속성이 메타 데이터

<EntityType Name="User"> 
<Key> 
    <PropertyRef Name="Id"/> 
</Key> 
<Property Name="UserName" Type="Edm.String"/> 
<Property Name="EmailAddress" Type="Edm.String"/> 
<Property Name="Id" Type="Edm.String"/> 
<Property Name="FirstName" Type="Edm.String"/> 
<Property Name="LastName" Type="Edm.String"/> 
<Property Name="Custom" Type="Edm.String"/> 
<NavigationProperty Name="GroupLookup" Type="Collection(Enwisen.GroupLookup)"/> 
<NavigationProperty Name="UserLogin" Type="Enwisen.UserLogin" Nullable="false/> 
</EntityType> 

공지 사항입니다하지만 결과에 반영 나던.

http://localhost/WebApi/enwisen/User_Entity/User_Entity?$expand=UserLogin 

는 따라서 탐색 속성이 응답 페이로드에 표시됩니다 : 당신은 다음과 같이 쿼리를 작성해야

http://localhost/WebApi/enwisen/User_Entity/User_Entity 

으로 당신이 당신의 GET 요청을 작성하는 그런

답변

1

보인다.

O 데이터 프로토콜 참조 번호 : 11.2.4.2 System Query Option $expand.

+0

위로 wcf 데이터 서비스 odata를 사용할 때 확장 속성을 사용하지 않아도 탐색 속성이 표시됩니다. 그것에 연결된 링크가 있습니다. 나는 웹 api가 다른 행동을하는지 모른다. – destroyerlp

+0

WCF Data Services에서 반환하는 기본 페이로드 유형은 Atom입니다. 탐색 링크의 연관 링크와 탐색 링크는 기본적으로 Atom 페이로드에 포함됩니다. 귀하의 웹 API 서비스가 반환하는 페이로드가 JSON 페이로드라고 생각합니다. V3 OData 서비스의 경우 탐색 링크를 JSON 페이로드에 포함하려면 페이로드를 http : // localhost/WebApi/enwisen/User_Entity/User_Entity? $ format = application/json; odata = verbose로 요청할 수 있습니다. V4 서비스의 경우 http : // localhost/WebApi/enwisen/User_Entity/User_Entity? $ format = application/json; odata.metadata = full을 요청해야합니다. –

+0

좋아요! 이제 탐색 속성을 볼 수 있습니다. Thanks @ Yi Ding – destroyerlp

관련 문제