c# - 如何使用 Entity Framework Core 2.0 检索 JSON 存储过程的结果?
问题描述
Ciao,我正在开发一个 Web API Core 2 项目,并且正在使用带有 SQL Azure 数据库的 Entity Framework Core 2。
实际上
在 SQL Azure 数据库中,我有一个返回 JSON 的存储过程,如下所示:
CREATE PROCEDURE [dbo].[sp_Procedura]
AS
BEGIN
SET NOCOUNT ON
DECLARE @data NVARCHAR(MAX) =
(SELECT
*
FROM
dbo.Entity
FOR JSON AUTO)
select 0 as 'Id', @data as 'data'
END
实际上,要读取结果,我必须创建一个映射结果并使用以下代码读取数据的实体:
string json = myContext
.JsonResult.FromSql("exec dop.sp_Procedura")
.ToList().FirstOrDefault().data;
在实体类下面:
public class Entity
{
[Key]
public int Id { get; set; }
public string data { get; set; }
}
期望的
我认为这个解决方案并不完全干净。我的存储过程应如下所示:
CREATE PROCEDURE [dbo].[sp_Procedura]
AS
BEGIN
SET NOCOUNT ON
SELECT
*
FROM
dbo.Entity
FOR JSON AUTO
END
像以前一样有一个存储过程,使用 EF Core 2.0 有没有办法像下面的伪代码一样读取 JSON 结果?
string json = myContext.FromSql("exec dbo.sp_Procedura").Result;
谢谢
解决方案
使用 newtonsoft.JSon nuget 包,您可以将实体转换为 JSON 并返回。不需要执行存储过程。
这种方式更快,因为实体框架可以使用二进制传输从SqlServer传输数据而不是整个字符串内容。
这里有一些 json 序列化的示例: https ://www.newtonsoft.com/json/help/html/SerializeObject.htm
顺便说一句,我相信 SqlServer 里面也使用了 newtonsoft.json。
推荐阅读
- amazon-web-services - 如何向 AWS Sagemaker 标签作业添加更多照片?
- c# - Visual Studio 库:引入 Newtonsoft.Json
- ios - 当应用程序处于后台状态时,在 wkwebview 中加载 urlrequest
- node.js - 在 node.js 中同步 axios 请求
- node.js - NPM Linux Ubuntu 服务器 20.04
- angular - ModuleWithComponentFactories 有一个空的 componentFactories 数组
- java - 为了让 lombok 在 IntelliJ 上识别 @Data 注释,我需要什么?
- r - 提取 LZIP (.lz)
- android - Android 手机不显示 SMS 发件人 ID
- python - 音乐机器人在 core.py 和 bot.py 返回错误