首页 > 解决方案 > 如何使用 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;

谢谢

标签: c#tsqlentity-framework-core-2.1

解决方案


使用 newtonsoft.JSon nuget 包,您可以将实体转换为 JSON 并返回。不需要执行存储过程。

这种方式更快,因为实体框架可以使用二进制传输从SqlServer传输数据而不是整个字符串内容。

这里有一些 json 序列化的示例: https ://www.newtonsoft.com/json/help/html/SerializeObject.htm

顺便说一句,我相信 SqlServer 里面也使用了 newtonsoft.json。


推荐阅读