WCF数据服务(OData) - 使用外键扩展导航属性

时间:2011-11-02 23:24:38

标签: c# wcf wcf-data-services odata

我目前正在编写基于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。

任何建议都将不胜感激。

2 个答案:

答案 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')?$扩大=项目