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;
谢谢
答案 0 :(得分:0)
使用newtonsoft.JSon nuget包,可以将Entity转换为JSON,然后转换回JSON。不需要实现存储过程。
以这种方式更快,因为实体框架可以使用二进制传输来传输来自SqlServer的数据,而不是整个字符串内容。
以下是一些要json序列化的示例: https://www.newtonsoft.com/json/help/html/SerializeObject.htm
顺便说一句,我相信SqlServer也在内部使用newtonsoft.json。