问题标签 [asp.net-web-api-odata]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
breeze - 可以轻松使用以 atom/xml 格式提供的 WebAPI Odata 元数据文档
我现在正在尝试构建一个 POC,以便轻松调用 Web API Odata 服务。可以轻而易举地使用默认提供的元数据文档的 Atom/xml 格式,或者它应该仅采用 json 格式。
我检查了 web api 的源代码,特别是 ODataMediaTypeFomatters 并确定元数据的 ODataPayloadKind 不是 JsonMediaTypeFormatter 的一部分。
我尝试使用 atom/xml 格式,但微风客户端无法进行该调用。
提前致谢, Teja
asp.net-web-api - 如何为始终返回单个实体的方法配置 odata Web api 路由
我想配置一个始终返回单个实体的路由。
控制器看起来像:
class StatsController: ODataController {
public Stats Get() {
return new Stats();
}
}
访问它的 url 应该是:GET ~/service-prefix/stats
我见过的所有选项都涉及必须返回 IQueryable,或者在返回单个实体时,以 ~/service-prefix/EntitySet(1) 的形式传入一个键
有没有办法在不必返回 IQueriable 的情况下实现上述目标?
entity-framework - EntityFramework Model-First 元数据,用于微风js
Breeze.js 库需要实体上下文的元数据。Web API OData 有一个用于此操作的默认 ODataConventionModelBuilder,但不适用于 Breeze,因为它缺少外键信息。因此,Breeze 提供了一个名为“EdmBuilder”的特殊包来生成此信息。但是,它仅适用于 Code-First 方法。如果存在现有的 edmx 文件,则会给出以下异常;
不支持从使用 Database First 或 Model First 创建的 DbContext 创建 DbModelBuilder 或编写 EDMX。EDMX 只能从不使用现有 DbCompiledModel 创建的 Code First DbContext 中获取。
简而言之,如果项目中有一个现有的edmx文件,如何将它作为元数据信息发布到breezejs?
odata - 单结果按键查询时无法在 Web API 中序列化
尝试使用主键 CourseID 针对 odata web.api 使用以下方法查找单个记录:
这是错误:
linq - 具有自定义 IQueryable 和 IQueryProvider 的 ASP.NET OData
我正在尝试使用 Linq to Entities 对 asp.net OData 服务公开的实体应用额外的服务器端过滤。
到目前为止一切都很好,但是我为过滤器构建的 Linq 查询有时会变得很长,从而导致 StackOverflowException。
作为一种解决方法,我想在一个单独的线程中执行查询,为该线程提供更大的堆栈大小限制。为了实现这一点,我实现了 IQueryable 和 IQueryProvider 包装器,这样当调用 IQueryable 的 Execute 方法时,它将在单独的线程中执行。
为了保持简单并专注于我的问题,我将在以下代码示例中省略线程部分,因为这不是这里的问题。
以下是代码的相关部分:
当我运行它时,我在 MyQueryProvider.Execute 方法中得到一个 InvalidOperationException:
这就是我构建传递给 MyQueryable 的原始 IQueryable 的方式:我从实体上下文中获取 DbSet,对其应用 OData 过滤器查询选项,然后调用 Count()。类似于以下内容:
我部分确定问题在于 odata 过滤器查询选项包含嵌套的“任何”过滤器,例如:
这会向 IQueryable 的 Where 表达式添加检查 RelatedEntities 集合是否为空。据推测,此检查是导致上述异常的原因。
我无法理解的是,为什么当我尝试将 Execute 方法的执行从 MyQueryable.Execute 方法委托给它时,原始 IQueryable 会失败,但是当我直接使用原始 IQueryable 时,它一切正常。
对此的任何帮助将不胜感激。提前致谢。
entity-framework - 使用 Breeze EdmBuilder 时如何添加 EntitySet
最终编辑:我会将答案放在此处供其他正在搜索的人使用。主要问题是 db-first 生成的 EDM 将“.Models”附加到模型命名空间的末尾导致命名空间不匹配。此命名空间与 odata 命名空间不匹配,因此路由失败。我刚刚从命名空间中删除了所有出现的“.Models”,现在它可以工作了。
一个新手尝试设置了 webApiOdata 的 Breeze。对不起,如果这个问题是微不足道的。
我有一个带有 webapi odata 控制器的 db 生成的 edmx 模型。在我了解新的 Breeze EdmBuilder 之前,我一直无法获得正确的元数据来显示。
这解决了显示正确元数据的问题,但现在,我无法路由到任何表。如果我尝试 /odata/Customers 我会收到 406 错误。
之前,我使用 ODataConventionModelBuilder 设置 EntitySets 并且效果很好。
现在,由于我使用的是 EdmBuilder,如何设置 EntitySet 以便可以路由到正确的数据?
我希望这个问题是有道理的。
*编辑:我添加了 GCSodContext 列表和客户控制器的片段。
这是客户控制器
这是客户类。
entity-framework - 微风js和ASP.NET Web Api OData中的实体框架继承
根据此示例,我正在使用带有 WebApi OData 的微风。如本文所述,由于缺少外键信息,我无法使用 ODataConventionModelBuilder。假设我有一个名为“Car”的实体,该实体派生自一个名为“Vehicle”的实体。使用 ODataConventionModelBuilder 我可以定义如下模型:
我可以像这样进行查询:
- /odata/Vehicles --> 返回所有车辆。
- /odata/Cars --> 只返回汽车。
但是对于 Breeze EdmBuilder 类,我只能使用“/odata/Vehicles”查询。“/odata/Cars”会导致“404 not found”错误。
似乎在使用“ODataConventionModelBuilder”时,“汽车”实体集是在元数据中定义的,但在使用微风 EdmBuilder 时,却不是。我可以在向元数据端点('odata/$metadata')发送请求时确认此行为。此问题中所述的代码优先和模型优先方法都会发生这种情况。
简而言之,在微风和Web Api OData中使用EdmBuilder类时如何使用继承。
更新
这是使用“ODataConventionModelBuilder”时的元数据:
这是使用微风 EdmBuilder 类时的元数据:
这是 edmx 文件中的概念模型部分:
asp.net-web-api - WebApi EntitySetController 使用复合键
优秀的示例代码:ASP.NET Web API OData 中的支持复合键 说明了如何创建路由约定以使 WebApi OData 与复合键一起工作。
然而,它使用的是 ODataController(作为示例代码中提到的未回答的讨论之一),我认为它有很多缺点(我还没有完全发现)......有没有人使用 EntitySetController 的好处创建了一个示例?
sql - WebApi oData 生成不兼容的 SQL
我收到错误:
SQL Server 2005 之前的 SQL Server 版本不支持将参数作为查询中的 TOP 子句和 LIMIT 子句或命令树中的 LimitExpression 的参数。
Take()
在 LinqPad 中或通过 http使用 WebAPI + oData 时:
但是,如果我直接对 DbContext 运行 Take() ,它就可以正常工作。所以我认为 oData 魔法正在创建一些我的设置不支持的 linq / sql。
我遇到的问题是需要将 EDMX 设置为在兼容模式 80(sql 2000)下运行。
而且我在 ASP.NET Web API OData 中使用复合键(但我现在明白这是另一篇文章推荐的方法,所以可能不是问题)。
它来自视图,而不是表格。
我正在使用 WebApi 1(不是 2)。
有没有办法覆盖正在生成的 SQL,这样我就可以避免不兼容的 SQL?
编辑:
在逐步完成 webapi(然后是实体框架代码)之后——一次启发性的体验,我发现了引发异常的行:
在 \entityframework\src\EntityFramework.SqlServer\SqlGen\Sql8ConformanceChecker.cs
但是我仍然不确定为什么我可以轻松地针对上下文执行 OrderBy().Take() 但 oData 版本失败。
我设法比较了 oData 生成的 DbQueryCommandTree 与查询 dbContext 时生成的等效项。
oData 版本:
直接点击 dbContext 时的版本
最大的不同在于它在参数中传递的 oData 版本:
而 dbcontext 版本的参数只是直接传入,即“10”
asp.net-web-api-odata - WebAPI 1 支持什么版本的 oData?
WebAPI 1 支持什么版本的 oData?
搜索起来有点棘手,因为现在有大量有关 WebAPI 2 的信息。