我已经配置了我的 WebAPI ODATA 服务(使用 5.0.0-rc1 获得 $expand 和 $select 支持)并且一切似乎都工作正常,但导航属性。
元数据确实包含我的导航属性(OpenPositions on Mandate):
然后我的微风查询如下:
function search() {
var query = breeze.EntityQuery.from("Mandates").expand("OpenPositions").inlineCount();
return manager.executeQuery(query.using(service)).then(function (result) {
logger.info(result);
}).fail(function (error) {
logger.error(error);
});
}
WebAPI 控制器:
[Queryable(AllowedQueryOptions= AllowedQueryOptions.All)]
public override IQueryable<Mandate> Get()
{
return new List<Mandate>() { new Mandate() {
Id = 1,
PolicyNumber = "350000000",
OpenPositions = new List<OpenPosition>(){
new OpenPosition(){ Id = 1, Amount = 2300, Mandate_Id = 1 },
new OpenPosition(){ Id = 2, Amount = 2100, Mandate_Id = 1 }
}},
new Mandate() {
Id = 2,
PolicyNumber = "240000000" ,
OpenPositions = new List<OpenPosition>(){
new OpenPosition(){ Id = 3, Amount = 2500, Mandate_Id = 2 },
new OpenPosition(){ Id = 2, Amount = 2100, Mandate_Id = 2}
}
} }.AsQueryable<Mandate>();
}
没什么了不起的。但是,尽管我的 Mandate 实体正在返回结果集中,但它们没有 OpenPositions 集合。
作为测试,如果我添加.select("OpenPositions")
到微风查询中,则会收到错误消息:
unable to locate property: OpenPositions on entityType: Mandate:#WebAPINoBreeze.Models
为什么会这样?
[编辑] query.entityType.NavigationProperties 是一个空数组,所以这可能是一个线索......似乎微风无法从元数据中构建导航属性。
[编辑]
外键添加。问题仍然存在:
public class Mandate
{
public int Id { get; set; }
public string PolicyNumber { get; set; }
public EStatus Status { get; set; }
public virtual List<OpenPosition> OpenPositions { get; set; }
}
public class OpenPosition
{
public int Id { get; set; }
public decimal Amount { get; set; }
[ForeignKey("Mandate")]
public int Mandate_Id { get; set; }
}
**[编辑] **
由于某些原因,在编译时删除了 [ForeignKey("Mandate")] 属性(我认为这是因为生成了模型类。我找到了一种解决方法,元数据现在包含 OpenPositions 中 Mandate 的外键 MandateId :