0

我有一个基本的 POCO(无数据库)结构,使用最新的 WebAPI 更新实现 OData 服务。不幸的是,最新的更新破坏了 HasNavigationPropertiesLink 代码,我必须生成可用于 $expand 操作的链接。这是我的旧代码:

var jobs = modelBuilder.EntitySet<Job>("Jobs");
jobs.EntityType.NavigationProperties,
            (entityContext, navigationProperty) => new 
             Uri(entityContext.UrlHelper.Link(ODataRouteNames.PropertyNavigation, 
                   new 
                      { 
                           Controller = "Jobs", 
                           parentId = entityContext.EntityInstance.ID,
                           NavigationProperty = navigationProperty.Name 
                       })));

这是我的新代码(不起作用):

var jobs = modelBuilder.EntitySet<Job>("Jobs");
jobs.EntityType.NavigationProperties,
            (entityContext, navigationProperty) => new 
             Uri(entityContext.Url.Link(<??WHAT GOES HERE??>, 
                   new 
                      { 
                           Controller = "Jobs", 
                           parentId = entityContext.EdmObject,
                           NavigationProperty = navigationProperty.Name 
                       })),
                       true);

非常感谢任何帮助 - 这似乎没有记录在更新中。

4

2 回答 2

0

看起来您使用的 OData 位的版本非常旧。在我们当前的版本中,您可以使用 ODataConventionsModelBuilder 创建一个模型,该模型定义导航属性和遵循约定的链接,因此除非您需要生成自定义链接,否则这是一种更好的方法。但是,如果您想生成自定义导航链接,链接生成代码类似于以下内容:

        var jobs = builder.EntitySet<Job>("Jobs");
        jobs.HasNavigationPropertiesLink(customers.EntityType.NavigationProperties,
            (context, navigationProperty) =>
            {
                var result = "http://mydomain.com/prefix/odataPath";
                //In order to generate this link you can use context.Url.ODataLink(new EntityPathSegment("Jobs"), ...);
                return new Uri(result);
            }, followsConventions: true);
于 2013-07-24T17:25:33.897 回答
0

最好ODataConventionsModelBuilder按照哈维尔的建议使用。但是,如果您仍想建立自己的 odata 模型,您可以这样做:

var jobs = builder.EntitySet<Job>("Jobs");
        jobs.HasNavigationPropertiesLink(customers.EntityType.NavigationProperties,
            (context, navigationProperty) => context.GenerateNavigationPropertyLink(navigationProperty, false)
            , followsConventions: true);
于 2014-04-30T09:23:32.427 回答