【发布时间】:2015-07-29 10:30:46
【问题描述】:
使用的软件:
- ASP.Net Web API 2
- OData v4
- Microsoft OData 客户端 6.13
考虑以下模型:
位置(Id、LocationName、街道、PostalCodeId)
邮政编码(ID、ZIP)
一个Location有一个PostalCode,一个PostalCode有很多Locations。
这是 OData 配置:
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Location>("Locations");
builder.EntitySet<PostalCode>("PostalCodes");
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: "odata",
model: builder.GetEdmModel());
模型类:
public class Location {
[Key]
public int Id { get; set; }
public String LocationName { get; set; }
public String Street { get; set; }
public int PostalCodeId { get; set; }
[ForeignKey("PostalCodeId")]
public PostalCode PostalCode { get; set; }
}
public class PostalCode {
public int Id { get; set; }
public string ZIP { get; set; }
public List<Location> Locations { get; set; }
}
在浏览器中调用http://localhost:49938/odata/Locations?$expand=PostalCode&$orderby=LocationName $expand 有效:
{
"@odata.context": "http://localhost:49938/odata/$metadata#Locations",
"value": [
{
"Id": 1,
"LocationName": "My Location 1",
"Street": "Street 7",
"PostalCodeId": 1838,
"PostalCode": {
"Id": 1838,
"ZIP": "4081"
}
}
]
}
但是当我在应用程序中执行相同的请求时,它不起作用:
Container c = new Container(new Uri("http://localhost:49938/odata/"));
var result = c.Locations
.Expand(x => x.PostalCode)
.OrderBy(x => x.LocationName)
.ToList();
当我执行这段代码时,PostalCode 是null。
【问题讨论】: