如何将实体设置为导航属性(Get),并且还能够将复杂对象传递给它(Patch,Put)

时间:2017-12-10 22:50:41

标签: odata

我正在使用Entity Framework 6和OData。我有一个模型A,其中有几个导航属性到其他模型,例如模型B.对于Get,我希望能够调用A,并扩展为B(我可以成功地完成此操作)。棘手的一点是,现在我希望能够调用Patch,并在正文中包含A的所有数据以及B的嵌套数据。

我知道EF不接受虚拟数据,因此我想我可以在我的应用程序中提取数据,并在使用EF保存之前手动清空这些字段。那会很棒。

但是,我可以让OData接受我的子对象的唯一方法是通过将此行添加到模型构建器来指定属性B的类型是复杂对象...

builder.ComplexType<B>();

然后我可以在Patch上传递此类型的嵌套数据,但现在我的Get不起作用,因为它表示你无法扩展到复杂类型,只能导航类型。

所以,它只能以这种或那种方式工作。关于如何在两种情况下同时完成这样的事情的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用$ref设置实体之间的链接。

例如:

  1. POST ~/As要创建新的AAs,您可以从回复中获取位置ID。因此,您可以获得新A

  2. 的关键字
  3. POST ~/Bs要创建新的BBs,您可以从回复中获取位置ID。因此,您可以获得新B的ID(uri)。

  4. 然后,您可以使用$ref在新A和新B之间创建链接。 对于$ ref,您可以参考示例代码here