2013-07-23 21 views
0

我有一個基本的POCO(無數據庫)結構,它使用最新的WebAPI更新實現OData服務。不幸的是,最近的更新打破了HasNavigationPropertiesLink代碼,我必須生成可用於$ expand操作的鏈接。這裏是我的舊代碼:如何在最新的WebAPI測試版之後使用HasNavigationPropertiesLink配置鏈接(2013年6月26日)更新

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); 

任何幫助是非常讚賞 - 這似乎並沒有已經在被記錄在案更新。

回答

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); 
0

最好是使用ODataConventionsModelBuilder作爲哈維爾曾建議。但如果你仍然想建立你自己的odata模型,你可以這樣做:

var jobs = builder.EntitySet<Job>("Jobs"); 
     jobs.HasNavigationPropertiesLink(customers.EntityType.NavigationProperties, 
      (context, navigationProperty) => context.GenerateNavigationPropertyLink(navigationProperty, false) 
      , followsConventions: true); 
相關問題