我有一个由两个实体组成的简单数据模型
public class product
{
public int ID {get;set;}
public string Name {get;set;}
}
public class supplier
{
public int ID {get;set;}
public string Name {get;set;}
public IEnumerable<product> products {get;set;}
}
现在,从我的WebApi odata控制器,我想让供应商返回他们所有的产品。但我似乎无法实现这一点,只需返回供应商并有效地剥离产品信息。控制器方法是一个简单的Get和GetEntityByKey。 我的配置如下。
ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<supplier>("supplier");
modelBuilder.EntitySet<product>("product");
我是否缺少配置选项以使其正常工作?
答案 0 :(得分:1)
您没有提到您用于获取供应商实体的URI,但我会假设它看起来像:http://.../ServiceRoot.svc/supplier(1)
。默认情况下,OData中不会展开导航属性;也就是说,默认情况下,请求供应商不会包含链接产品的ID和名称,除非您通过$expand
查询选项明确要求它们。例如:http://.../ServiceRoot.svc/supplier(1)?$expand=products
。
如果不展开导航属性,则供应商的products
属性将仅显示为产品实体的链接集合。如果您没有看到响应有效负载中产品的链接,可能是因为您正在使用OData的新v3 JSON格式,这可能会忽略遵循一般OData URI约定的导航链接(因为客户端可以生成这些链接本身)。
如果您包含请求URI和有效负载,那么我可以更清楚地了解您的情况。
关于术语的快速说明:OData中的“复杂类型”通常是指没有身份的结构类型。典型的示例可以是地址类型,它是具有多个组件(城市,国家,街道等)但不需要拥有自己的密钥的值类型。你在这里谈论的是实体之间的导航。
答案 1 :(得分:0)