我定义了以下Model类:
public class LinePostModel
{
[Key]
public int OrderId { get; set; }
public IList<OrderLine> OrderLines { get; set; }
}
和我的OData控制器上的这个方法:
public async Task<IHttpActionResult> Post(LinePostModel model)
{
//validae model and its OrderLines collection and save to repo.
return Created(model);
}
服务器正确接收模型对象,并处理每个查找。我的问题是返回给客户端的RESPONSE只包含原始的OrderId属性,并且不包含集合属性OrderLines。
如何解决这个问题,以便将整个复杂对象返回给客户端?
编辑:添加样本json:
以下是客户发布的内容:
{
orderId:4,
orderLines: [
{
lineType: "S",
orderQty: 10,
priceCode: "D",
stockCode: "62.C6W026A.050",
warehouse: "GS",
orderId:4
},
{
lineType: "S",
orderQty: 20,
priceCode: "D",
stockCode: "62.C6W026A.060",
warehouse: "GS",
orderId:4
}
]
}
以下是客户端从服务器收到的内容:
{
"@odata.context": "http://localhost:4095/$metadata#OrderLines/$entity",
"orderId": 4
}
我尝试更改服务器以返回Ok(model)
而不是Created(model)
,但这没有任何区别。
控制器方法中return Created(model)
行的断点显示,此时模型对象肯定包含OrderLines的集合。
答案 0 :(得分:0)
没有足够的信息继续下去,但如果您使用Entity Framework保存到repo,请记住在检索已保存的记录时添加.Include()
以返回子记录。
答案 1 :(得分:0)
我认为你应该尝试这个答案,看看这是否有帮助。 https://stackoverflow.com/a/16472870/1233465
您可以尝试在请求中添加接受标头,看看是否有帮助。请分享您的结果和发现。
答案 2 :(得分:0)
如果您不需要父类,您只需返回List&lt; orderLines&gt;。
return Created(model.orderLines);
当其他人提到他们返回的字符串是整个复杂对象的JSON序列化时,我意识到了这一点。如果他们可以返回字符串,我可以返回List&lt; childObject&gt;。
答案 3 :(得分:0)
OrderLine是实体还是复杂属性?
您需要确保WebApiConfig.cs中定义的EDM模型具有正确映射的上述关系。对于初学者,您应该在运行时检查/ $ metadata。
如果EDM模型之间没有正确的关系,则ODATA管道将删除多余的信息。
答案 4 :(得分:0)
我有同样的问题。对我而言,OrderLine被定义为实体类型。同一类型不能同时是实体类型和复杂类型,因为复杂类型没有'Id'属性。确保未将OrderLine设置为EntityType。如果这样不起作用,请尝试将其明确设置为“ ComplexType”。
答案 5 :(得分:0)
是的,我遇到同样的问题,请尝试以下操作: http:// localhost:4095 / odata / LinePostModel?$ expand = OrderLines enter image description here