首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向OData Web API控制器添加自定义导航属性

向OData Web API控制器添加自定义导航属性
EN

Stack Overflow用户
提问于 2014-07-29 05:21:46
回答 1查看 2.7K关注 0票数 2

我有一个OData v3 Web API项目。它使用实体框架代码优先模型。

主类是Coupon。它有一个列表。这实际上是一个由两个元素组成的子类型ItemRequirement和BasketRequirement的集合。我想说的是:

代码语言:javascript
复制
../odata/Coupons(5)/ItemRequirement

我不能让它工作。

首先,在EF类中,我添加了ItemRequirement作为NotMapped属性(因为该类已经有一个基类的集合作为导航属性,而添加另外两个属性只会生成无关的表键并不必要地扰乱数据库。Code First中的Table-Per-Hierarchy工作得很好)。

ODataConventionModelBuilder()没有将ItemRequirement作为导航属性

我尝试添加它:

代码语言:javascript
复制
// GET odata/Coupons(5)/ItemRequirement
public ItemRequirement GetItemRequirement( [FromODataUri] decimal key)
{
   return db.Coupons.Where(m => m.CouponId == key).SelectMany(m => m.RedemptionPurchaseRequirements).OfType<ItemRequirement>().FirstOrDefault();
}

URI永远不会进入这段代码。通过添加一个IODataRoutingConvention实现器,我发现ODataPath被设置为导航/键/未解析。

我看了这个解决方案,它对我也没有帮助:

Adding a custom query backed Navigation Property to ODataConventionModelBuilder

我不知道问题是不是继承的问题,属性没有在EF中映射的事实,还是什么。

我还发现使用404会失败:

代码语言:javascript
复制
oData/PurchaseRequirementsBases(5)/myNamespace.ItemRequirement

到底需要什么魔法才能将集合抽象出来,这样OData消费者才能将ItemRequirement视为优惠券的有效属性?

EN

回答 1

Stack Overflow用户

发布于 2014-07-31 11:46:41

您可以尝试显式添加导航属性吗?

代码语言:javascript
复制
odataConventionModelBuilder().Entity<Coupon>().HasOptional(coupon => coupon.ItemRequirement)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25004570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档