为了账号安全,请及时绑定邮箱和手机立即绑定

OData 和 Cosmos DB

OData 和 Cosmos DB

C#
慕莱坞森 2022-08-20 17:29:23
我希望在我正在处理的 ASP.NET 核心应用程序中实现 OData v4 作为查询工具,我们的后备持久性存储是 Cosmos DB。到目前为止,我还没有找到一种方法来使 OData 查询针对 DocumentQuery IQueryable 接口运行,而不会遇到某种异常或错误。我想知道是否有一种“干净”的方式来利用OData来对抗Cosmos Document DB(而不是Table API),如果是这样,如何?到目前为止,我所发现的只是一个使用 Framework v4.6 的非官方库,但没有官方的,而且我发现的有关实现 OData 的所有文档几乎完全针对实体框架或内存数据存储运行。
查看完整描述

3 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

我知道这并不是对我的问题最有见地的答案,但这里的正确答案是不要试图这样做。如果你曾经处于这样一个位置,有人要求你试图将两种并不真正结合在一起的技术结合在一起,那就说“不”并处理后果。


查看完整回答
反对 回复 2022-08-20
?
慕后森

TA贡献1802条经验 获得超5个赞

如果您使用的是SQL api,并且只需要$orderby,$top和$skip等基本内容,则OData与Cosmos的集成并不难。这是一个生成正确的 SQL 的问题。


如果你需要更多,它会变得有点困难。无论如何,我用这个NuGet库做了一些简单的测试。它似乎至少从我的简单测试中起作用。


        var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());

        var select = oDataToSqlTranslator.Translate(odataQueryOptions, TranslateOptions.SELECT_CLAUSE);

        var where = oDataToSqlTranslator.Translate(odataQueryOptions, TranslateOptions.WHERE_CLAUSE);

        var order = oDataToSqlTranslator.Translate(odataQueryOptions, TranslateOptions.ORDERBY_CLAUSE);

        var top = oDataToSqlTranslator.Translate(odataQueryOptions, TranslateOptions.TOP_CLAUSE);

        var all = oDataToSqlTranslator.Translate(odataQueryOptions, TranslateOptions.ALL);

        

        log.LogInformation("SQL select => " + select);

        log.LogInformation("SQL where  => " + where);

        log.LogInformation("SQL order  => " + order);

        log.LogInformation("SQL all    => " + all);

给定此 URL 作为输入:


http://localhost:7071/api/v1/invoices/customer/20?$top=2&$select=CustomerId&$filter=InvoiceNumber eq 'xxx'&orderby=brand


日志显示以下内容:


SQL select => SELECT c.CustomerId FROM c 

SQL where  => WHERE c.InvoiceNumber = 'xxx' 

SQL order  => ORDER BY c.InvoiceNumber ASC 

SQL all    => SELECT TOP 2 c.CustomerId FROM c WHERE c.InvoiceNumber = 'xxx' ORDER BY c.InvoiceNumber ASC 



查看完整回答
反对 回复 2022-08-20
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

怎么样 - 将OData转换为SQL,然后在CosmosDB上执行它 https://github.com/Azure/azure-odata-sql-js


查看完整回答
反对 回复 2022-08-20
  • 3 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信