如何基于共享模型(POCO类)构建OData客户端?

时间:2018-04-13 20:51:21

标签: c# rest asp.net-web-api2 odata

在我的项目中,我使用的是OData v3和v4(后面是带有Entity Framework的ASP.NET Web API)。 目前,我使用Visual Studio工具构建了一个客户端。

但还有另外一种方法吗?我是否真的必须基于$元数据和工具集构建客户端?

是否可以通过共享库共享我的模型(合同)并构建这样的客户端:

var client = new ODataClient<MySharedModel>(uri);
MySharedModel.Product product = client.Products.Where(p => p.Category.Name == "Vegetables").FirstOrDefault();

模型可以是一组我自己的DTO对象,我可以映射到等效的实体框架对象。

我的目标是,与其他逻辑(如ToString实现和其他属性)共享一个记录良好的模型(源代码xml文档)。更进一步,我节省了一个额外的步骤:生成一个客户端(当你在TFS Build服务器上自动构建和发布所有包时,这很糟糕。)

这对OData v3或OData v4是否可行?

1 个答案:

答案 0 :(得分:1)

OData最近开始恢复活力,该团队定期发布OData Connected Service实体生成器的新更新,因此您可能要考虑再给它一个镜头。
您绝对可以重复使用相同的模型,但是会丢失为您生成的特定于客户端的功能,例如,一个具有所有实体集作为属性的专用容器,集合属性公开为ObservableCollection<T>,以及自我跟踪实体以及其他实体。

所有类都是以partial class生成的,因此您始终可以通过将方法添加到自己的部分中来扩展它们,为此,它们也可以是共享类。

关于文档,目前尚不支持此文档,但这是suggested,似乎可以考虑用于将来的开发。

无论如何,这绝对有可能,并且不应该很难使用自己的实体。
要了解如何使用客户端POCO来促进OData客户端访问,我建议一次生成模型,并将代码保留在项目之外或作为排除的文件使用,仅供参考,以便您可以模拟适合您的类似功能。这对我来说是最有用的方法。

另外,您还可以受益于documentationAPI reference docs,它们最近都得到了一些刷新。