如何基于共享模型 (POCO 类) 构建 OData 客户端?
How can I build a OData client based on a shared model (POCO classes)?
在我的项目中,我使用的是 OData v3 和 v4(ASP.NET Web API,后面是 Entity Framework)。
目前我使用 Visual Studio 工具构建了一个客户端。
但是还有别的办法吗?我真的必须基于 $metadata 和工具集构建客户端吗?
是否可以通过共享库共享我的模型(合约)并构建这样的客户端:
var client = new ODataClient<MySharedModel>(uri);
MySharedModel.Product product =
client.Products.Where(p => p.Category.Name == "Vegetables").FirstOrDefault();
模型可以是我自己的一组 DTO 对象,我可以将其映射到等效的 entity framework 对象。
我的目标是,与其他逻辑(例如 ToString
实现和其他属性)共享一个记录良好的模型(源代码 XML 文档)。此外,我节省了一个额外的步骤:生成客户端(当您在 TFS 构建服务器上自动构建和发布所有包时,这很糟糕)。
OData v3 或 OData v4 是否可行?
OData 最近开始复兴,团队定期发布 OData Connected Service 实体生成器的新更新,因此您可能需要考虑再试一次。
您绝对可以重用相同的模型,但是您会失去为您生成的特定于客户端的功能,例如一个专用容器,其中包含所有实体集作为属性,集合属性公开为 ObservableCollection<T>
,以及自我跟踪实体,以及其他实体。
所有 类 都生成为 partial class
es,因此您始终可以通过将方法添加到您自己的部分来扩展它们,就此而言,这些部分也可以共享 类 .
关于文档,目前不支持,但这已经 suggested 并且似乎会考虑用于未来的开发。
无论如何,这绝对是可能的,并且不应该很难使用您自己的实体。
要了解如何使用客户端 POCO 促进 OData 客户端访问,我建议生成一次模型并将代码保留在项目之外或作为排除文件,仅供参考,以便您可以模仿适合您的类似功能。这是对我最有帮助的方法。
此外,您将受益于查看 documentation and the API reference docs,最近更新了一些。
在我的项目中,我使用的是 OData v3 和 v4(ASP.NET Web API,后面是 Entity Framework)。 目前我使用 Visual Studio 工具构建了一个客户端。
但是还有别的办法吗?我真的必须基于 $metadata 和工具集构建客户端吗?
是否可以通过共享库共享我的模型(合约)并构建这样的客户端:
var client = new ODataClient<MySharedModel>(uri);
MySharedModel.Product product =
client.Products.Where(p => p.Category.Name == "Vegetables").FirstOrDefault();
模型可以是我自己的一组 DTO 对象,我可以将其映射到等效的 entity framework 对象。
我的目标是,与其他逻辑(例如 ToString
实现和其他属性)共享一个记录良好的模型(源代码 XML 文档)。此外,我节省了一个额外的步骤:生成客户端(当您在 TFS 构建服务器上自动构建和发布所有包时,这很糟糕)。
OData v3 或 OData v4 是否可行?
OData 最近开始复兴,团队定期发布 OData Connected Service 实体生成器的新更新,因此您可能需要考虑再试一次。
您绝对可以重用相同的模型,但是您会失去为您生成的特定于客户端的功能,例如一个专用容器,其中包含所有实体集作为属性,集合属性公开为 ObservableCollection<T>
,以及自我跟踪实体,以及其他实体。
所有 类 都生成为 partial class
es,因此您始终可以通过将方法添加到您自己的部分来扩展它们,就此而言,这些部分也可以共享 类 .
关于文档,目前不支持,但这已经 suggested 并且似乎会考虑用于未来的开发。
无论如何,这绝对是可能的,并且不应该很难使用您自己的实体。
要了解如何使用客户端 POCO 促进 OData 客户端访问,我建议生成一次模型并将代码保留在项目之外或作为排除文件,仅供参考,以便您可以模仿适合您的类似功能。这是对我最有帮助的方法。
此外,您将受益于查看 documentation and the API reference docs,最近更新了一些。