2

我正在使用新的 2012.2 OData 东西(Microsoft ASP.NET Web API OData)并遵循基本示例。我有一个非常基本的 POCO,它通过我在 /odata 的 MVC 站点“神奇地”公开:

    ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<Job>("Products");

Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel();
config.Routes.MapODataRoute("ODataRoute", "odata", model);

这似乎神奇地连接了 odata“服务”描述文件,并调用了我的 Products 控制器,该控制器被格式化为 ATOM。

我的问题与 POCO、描述和元数据有关。这里发生了很多魔法,我不知道在哪里可以找到文档。我希望能够:

  • 为我的实体提供“描述”属性(Excel 2013 在数据连接向导中显示了这一点)

  • 用用户友好的名称覆盖我的 POCO 的类名。作为奖励,请允许我动态设置它。

我真的不知道是什么生成了那个“/odata/magic.svc”文件,所以我不知道如何找到它的文档。这是 WebApi、OData、EntityFramework 吗?

谢谢!

4

1 回答 1

4

没有生成任何magic.svc。您已完成构建 OData 服务所需的 3 个步骤。有关详细信息,请参阅本教程和此博客文章

当你这样做时,

DataModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<Job>("Products");
Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel();

您已经为 OData 服务构建了EDM 模型

当你这样做时,

config.Routes.MapODataRoute("ODataRoute", "odata", model);

您正在告诉 Web API 使用您刚刚构建的服务模型在 ~/odata/ (第二个参数)处公开 OData 服务。

当您尝试获取 url ~/odata/Products 时,您添加的 OData 路由知道您正在尝试访问 Products 实体集并将其路由到 ProductsController。我将尝试写一篇关于 ODataConventionModelBuilder 使用的约定和默认 OData 路由约定的博客文章。

而关于另外两个问题,

1) 没有提供原子元数据的开箱即用支持。但是,您可以通过使用为 OData 格式化程序添加可扩展性点的每晚删除来覆盖原子元数据。有关详细信息,请参阅此答案

2) 我们现在不支持别名。所以,那里没有运气。不过,它是我们未来计划中的首要项目之一。

于 2013-03-28T16:04:57.153 回答