如何使用Entity Framework Core 2.0检索JSON存储过程的结果?

时间:2018-11-28 10:07:32

标签: c# tsql entity-framework-core-2.1

Ciao, 我正在研究Web API Core 2项目,并且将Entity Framework Core 2与SQL Azure数据库一起使用。

实际上

在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;

谢谢

1 个答案:

答案 0 :(得分:0)

使用newtonsoft.JSon nuget包,可以将Entity转换为JSON,然后转换回JSON。不需要实现存储过程。

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

以下是一些要json序列化的示例: https://www.newtonsoft.com/json/help/html/SerializeObject.htm

顺便说一句,我相信SqlServer也在内部使用newtonsoft.json。