gpt4 book ai didi

c# - 用于在 SQL Server 中查询 JSON 字符串的 Entity Framework

转载 作者:可可西里 更新时间:2023-11-01 08:48:52 25 4
gpt4 key购买 nike

我正在寻找任何在使用 Entity Framework 查询 JSON 字符串方面做过任何事情的人。

我应该简要介绍一下我在这里要做的事情。我正在使用的数据库用于我正在使用的工作流引擎。它处理所有工作流数据,还允许您将一些自定义数据存储为 JSON 字符串。我使用的工作流引擎在每个请求的基础上处理 JSON 字符串的序列化和反序列化,但如果我想根据 JSON 字符串中的值进行查询和过滤,我将不得不拉将整个表放入内存并反序列化所有条目,然后进行过滤。出于显而易见的原因,这是 Not Acceptable 。这样做的原因是,我们想要一个单一的工作流数据库,它可以用于所有使用该工作流引擎的应用程序,并且我们正在努力避免必须执行跨数据库 View 来分离应用程序特定的数据库以获取自定义数据。因为在大多数情况下,存储为 JSON 字符串的自定义请求数据相对简单,并且在大多数情况下查询时不需要,这是设计使然。但是如果我们确实需要进行自定义搜索,我们需要一种能够解析这些自定义 JSON 对象的方法。我希望这可以通过 Entity 动态完成,这样我就不必编写额外的存储过程来查询特定类型的对象。理想情况下,我只需要一个使用实体来允许查询任何 JSON 数据结构的库。

我从一个数据库函数开始,我发现它解析 JSON 并返回一个包含值(父对象 ID、名称、值和类型)的扁平化表。然后将该函数导入到我的实体模型中。这是我从哪里获得代码的链接。很有趣的文章。

Consuming JSON Strings in SQL Server

这是我所处位置的基础知识。

using (var db = new WorkflowEntities()) {
var objects = db.Requests.RequestData();
}

在上面的代码示例中,Request 对象是我的基本工作流 Request 对象。 RequestData() 是类型的扩展方法

DbSet<Request>

parseJSON 是我的数据库函数的名称。

我的计划是编写一系列扩展方法来过滤可查询对象

IQueryable<parseJSON_result>

例如,如果我有一个看起来像这样的对象。

RequestDetail : {
RequestNumber: '123',
RequestType: 1,
CustomerId: 1
}

我可以做类似的事情

db.Request.RequestData().Where("RequestType", 1);

或类似的东西。 .Where 方法将采用 RequestData(),这是一个包含已解析 JSON 的 IQueryable,它将过滤并返回新的 IQueryable 结果。

所以我的问题是,有人做过这样的事吗?如果是这样,你采取了什么样的方法?我的初衷是想做一些字典式的东西,但是好像太难了。任何想法,想法,建议,智慧,将不胜感激。我在这方面工作了一段时间,我觉得我真的没有走那么远。这主要是因为我无法决定语法的外观,而且我不确定是否应该在数据库方面做更多的工作。

这是我最初的语法想法,但我无法在不对对象进行水合的情况下运行 [] 运算符。

db.Request.Where(req => req.RequestData()["RequestType"] == 1).Select(req => req.RequestData()["CustomerInfo"]);

我知道这是一篇很长的文章,所以如果您已经读到这里,感谢您花时间阅读整篇文章。

最佳答案

从 SQL Server 2016 开始,存在 FOR JSON 和 OPENJSON,等同于 FOR XML 和 OPENXML。您可以对引用存储在 NVARCHAR 列中的 JSON 的表达式建立索引。

关于c# - 用于在 SQL Server 中查询 JSON 字符串的 Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17439586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com