我目前正在编写基于WCF Dataservices Toolkit的OData服务。
服务公开了几个对象,下面列出了一个例子。
public class Entitlement : IEntity
{
#region Implementation of IEntity
public string Id { get; set; }
#endregion
public string ItemId { get; set; }
[ForeignProperty]
public Item Item { get; set; }
}
public class Item : IEntity
{
#region Implementation of IEntity
public string Id { get; set; }
#endregion
public string ItemName { get; set; }
}
由于从2个单独的数据源中检索数据,我只想将项目的Id存储在Entitlement对象中而不是整个Item对象中。
这适用于以下查询:Entitlement('1')/ Item,服务理解它需要使用ItemId来执行查找。
但是,当我尝试使用以下URL扩展Item时会出现问题 授权( '1')?$扩大=项目
Item总是返回null,我明白这是因为我没有将Item存储在权利对象上,但是无论如何我可以强迫OData以与处理投影相同的方式处理expand语句?
我试过了Entitlement('1')?$ select = Item但是这也是null。
任何建议都将不胜感激。
答案 0 :(得分:0)
要扩展导航属性(集合)引用的对象,我认为您需要在URI中使用$ links语法。
请参阅Section 3.2"Addressing Links Between Entities" in the OData Protocol URI Conventions doc。
答案 1 :(得分:0)
为了能够使用$ expand,您的模块必须在链接属性上具有虚拟关键字
public class Entitlement : IEntity
{
#region Implementation of IEntity
public string Id { get; set; }
#endregion
public string ItemId { get; set; }
public virtual Item Item { get; set; }
}
这将允许您使用oData查询选项$ expand
权利( '1')?$扩大=项目