C# 导航属性不反映

C# 导航属性不反映,c#,asp.net-web-api,odata,C#,Asp.net Web Api,Odata,我拥有的导航属性不会反映在我的odata结果上,但我正在为该属性赋值。这是密码 for (var x = 1; x <= 5; x++) { var mainEntity = new EdmEntityObject(entityType); mainEntity.TrySetPropertyValue("Id", "AllKey" + x.ToString()); mai

我拥有的导航属性不会反映在我的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", "EmailAddress@EmailAddress.com" + 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", "EmailAddress@EmailAddress.com" + x.ToString());
                mainEntity2.TrySetPropertyValue("FirstName", "FirstName" + x.ToString());
                mainEntity2.TrySetPropertyValue("LastName", "LastName" + x.ToString());

                mainEntity.TrySetPropertyValue("UserLogin", mainEntity2);                    

                collectionProduct.Add(mainEntity);
            }
这是元数据

<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>


似乎您正在将GET请求写为

http://localhost/WebApi/enwisen/User_Entity/User_Entity
您需要按如下方式编写查询:

http://localhost/WebApi/enwisen/User_Entity/User_Entity?$expand=UserLogin
因此,导航属性将显示在响应有效负载中


OData协议参考:。

当我使用wcf数据服务OData时,即使我没有使用expand,也会显示导航属性。它有一个关联的链接。我不知道web api是否有不同的行为。WCF数据服务返回的默认负载类型是Atom。默认情况下,导航属性的关联链接和导航链接包含在Atom有效负载中。我认为Web API服务返回的负载可能是JSON负载。对于V3 OData服务,要在JSON有效负载中包含导航链接,您可以按如下方式请求有效负载。对于V4服务,您应该请求。太好了!我现在可以看到导航属性了。感谢@Yi dinging如果我返回一个结果(如IEdmEntityObject),它会工作,但当我返回集合时,它会抛出一个错误“ObjectContent`1'类型未能序列化内容类型'application/json;odata.metadata=full;charset=utf-8'的响应体”。你知道这里的问题是什么吗?你也许可以参考这个问题的答案:
http://localhost/WebApi/enwisen/User_Entity/User_Entity?$expand=UserLogin