问题标签 [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.

0 投票
1 回答
338 浏览

odata - 使用 OData 4 发布到 WEB API 2 中的相关集合

我想要这样的路线:

我可以在其中执行 POST 来创建订单。我找不到在 WebApi 中使用 OData 添加此路由的方法。对于 GET 有一个约定来获取相关集合,但我找不到任何将新实体发布到相关集合的约定。

有没有标准的方法来处理这个 POST 请求与 Web API 2 和 OData 4 ?

0 投票
2 回答
2225 浏览

asp.net-web-api - 如何在代码中定义(可选)导航属性 (?$expand=)?

首先是解释和要点,然后是问题。所以:

假设我AccountView首先在 EF (6.1.1) 数据库 (edmx) 中定义了一个视图,因此代码生成的类是

然后我在同一个命名空间(Entities)中创建一个部分类

然后在WebApiConfig我写或尝试在 OData v4(最新的,6.9.0.0 系列与 WebApi,也是最新的)中的一些东西如下

结果$metadata就像

问题:TODO评论中所述,我应该如何定义

  • 一个导航属性,以便我可以调用http://example.com/Accounts?$expand=Companyhttp://example.com/Accounts?$Companies

现在,如果我打电话

  • http://example.com/Accounts或者
  • http://example.com/Accounts(someId)

然后,如果我做类似的事情

  • http://example.com/Accounts?$expand=Companies
  • http://example.com/Accounts?$expand=Company或者
  • http://example.com/Accounts(someId)?$expand=Company

我受到HTTP 400 (?$expand=Companies) 或HTTP 500 (?$expand=Company) 的欢迎。

我已经成功地建立了Containment关系。不过,它看起来需要由 ID 定义根实体,而我想向根提供“GET”并可选地扩展为“子列表”对象(因此这个关于 ?$expand= 的问题) .

现在的案例是为一个实体完成一个非可选expand的,但我怀疑我想要的下一件事是有一个实体列表(或这个特定示例中的公司)但我怎么能实现这些场景?如何解决这种情况扩展到第一个始终存在的子对象的情况?

我的控制器定义如下

我基本上想要做的是首先向数据库添加更多元数据,edmx,视图并模仿文章Using $select, $expand, and $value in ASP.NET Web API 2 OData。到目前为止没有成功...

<编辑1:可以这么说,情节变厚了。HTTP 500 错误来自一个内部异常(我必须打开对托管框架异常的中断),它说

EntityFramework.dll 中发生了“System.NotSupportedException”类型的第一次机会异常

附加信息:LINQ to Entities 不支持指定的类型成员“公司”。仅支持初始化程序、实体成员和实体导航属性。

所以,是的,AccountView是一个视图,它与表没有直接的外键关系Company(它恰好是一个表,但它也可能是一个视图)。我怎么去加一个?正如信息所证明的那样,我虽然添加元数据已经成功了$metadata。OData 不只是INNER JOIN在数据库中写入一个吗?我在这里错过了什么吗?...这似乎与我添加Company参考的方式有关,而 EF 不喜欢那样。看来我应该只将它添加到 OData 模型中......

<编辑 2:如果我将 更改AccountView CompanyIdCompanyID以匹配Company

<edit3:我问了另一个与此相关的问题,How to add complex properties on a model build with ODataConventionModelBuilder from an EF model

0 投票
2 回答
12523 浏览

c# - 启动时出现 OData v4 错误:未找到段“随便”的资源

我正在构建我的新 v4 服务,一切进展顺利,直到我为新模型/实体添加了一个新控制器,并在启动站点进行测试运行时出现此错误。

控制器似乎编码正确,就像其他控制器一样。

控制器“CustomersOData”中操作“GetFeed”的路径模板“客户”不是有效的 OData 路径模板。未找到“客户”部分的资源。

这到底是什么意思?

0 投票
1 回答
3106 浏览

asp.net-web-api - 使用达美复杂的对象

Delta<T> 可以与复杂的对象图一起使用,而不是单个对象吗?我尝试使用它但没有成功,我想知道我是否遗漏了某些东西,或者该功能是否根本不受支持。

例如,这是一个模型:

这是 OData 模型构建:

对于我的控制器的 POST 方法,我可以使用这个 JSON,它将被很好地反序列化:

但是,当我使用 PATCH 时会出现问题。如果我发送这个:

我的控制器方法签名如下所示:

然后,增量将包含一个 Address 属性,其中 City 和 PostCode 为 null,Street 为“Another Street”。这对我来说似乎是正确的。

然后,当我使用 delta.Patch(person) 将更改应用到 person 对象时,它会将这个地址批发复制到 person,而不仅仅是更新地址的 Street 属性。

我是否遗漏了什么,或者修补了 Delta<T> 不支持的复杂类型属性?

0 投票
1 回答
5432 浏览

asp.net-web-api - 将 OData 查询转换为 SQL

我在一个ODataController并且我有一个ODataQueryOptions(以及所有其他的)。

我知道数据的来源是 SQL Server 中的一个表。

但是,我的 EF 模型(被 WEB API 框架用于将 HTTP 请求路由到我的控制器)是无类型的,即我没有 POCO 类。

通常——如果我确实有一个 POCO 类——该框架会神奇地从 OData 查询中编写 SQL,以便分页、过滤和排序在数据库上完成,而不是在 Web 服务器的内存中完成。您可以使用Database.LogDbContext查看从涉及 POCO 类的 LINQ 语句生成的 SQL。

我怎样才能让这发生在我身上?我有 EF 模型,我有 OData 请求,但是如何将它们结合起来查询 SQL Server?

0 投票
1 回答
79 浏览

c# - 在 C# Odata Server 中,如何在不影响 odata 的元 URL 的情况下添加过滤器

在 C# Odata Server 中,如何在不影响 odata 服务的元 URL 的情况下添加过滤器?

我目前添加过滤器是这样的:

0 投票
1 回答
205 浏览

entity-framework - 从 WCF 数据服务迁移到 WebApiOdata

我们目前正在考虑从 WCF 数据服务迁移到 WebApiOData。我看到的问题是,我们必须在 webApi 控制器中为我们需要从客户端查询的每个表/视图创建一个方法。实体模型是在一个 edmx 中定义的,里面有很多表。拥有一个标准的 odata.svc 只允许我们向 edmx 添加一个表并直接通过 odata.svc 查询它是黄金,每次我们向 edmx 添加视图或表时都必须添加一个方法将是一场噩梦如果我们谈论> 50个表/视图,它只会变成到处乱七八糟的方法。

是否有一种更简单的策略来让一个控制器定义一个全局 get 方法,我们可以在 edmx 中查询所有表/视图?还是我需要为一切创建方法?

0 投票
1 回答
2235 浏览

entity-framework - 复杂类型“MyData.AssetReading”通过属性“Asset”引用实体类型“MyData.Asset”

查看设置 Web API odata 并尝试将数据从我们的 edmx 公开给它。问题是,每次我向 OdataConventionBuilder 添加实体时,我都会在加载时收到一条令人讨厌的错误消息:

似乎在 edmx 中定义的关系正在轰炸 webapi odata 关于复杂类型。由于 edmx 非常庞大,因此任何关于如何解决此问题的想法都是不可能的。是否需要在 Builder.EntitySet 或 MapOdataRoute 方法上设置属性?

0 投票
1 回答
365 浏览

entity-framework - 在 Edmx 上使用 WebApi + Odata

我们目前正在考虑使用 Odata 从 WCF 数据服务转换为 WebApi。我们的实体模型是使用定义为 edmx 的实体框架定义的。由于关系和复杂的属性,我正在努力让 edmx 与 WebApi OData 一起工作。

我只是想知道是否有人在更大尺寸的 edmx 上成功实现了带有 odata 的 webAPI(也有关系)?任何建议都会很棒。

0 投票
1 回答
1471 浏览

asp.net-web-api - $expand 中的 OData 查询选项 $count 不起作用

我试图在 $expand这样的查询中使用$count

但是 count 在结果中找不到。

也没有错误。我正在使用 ASP.NET Web API OData 5.4,它使用的是 OData v4。

是什么赋予了?还没实施?