我有一个基本的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);
非常感谢任何帮助 - 这些似乎没有记录在更新中。
答案 0 :(得分: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);
答案 1 :(得分:0)
最好像Javier所建议的那样使用ODataConventionsModelBuilder
。但如果您仍想设置自己的odata模型,可以这样做:
var jobs = builder.EntitySet<Job>("Jobs");
jobs.HasNavigationPropertiesLink(customers.EntityType.NavigationProperties,
(context, navigationProperty) => context.GenerateNavigationPropertyLink(navigationProperty, false)
, followsConventions: true);