Как я могу получить результат хранимой процедуры JSON с помощью Entity Framework Core 2.0? - PullRequest
0 голосов
/ 28 ноября 2018

Чао, я работаю над проектом 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 голосов
/ 28 ноября 2018

С пакетом nuget newtonsoft.JSon вы можете конвертировать Entity в JSON и обратно.Не нужно реализовывать хранимую процедуру.

Таким способом быстрее, потому что структура сущностей может использовать двоичную передачу для передачи данных из SqlServer, а не всего содержимого строки.

здесьнекоторые примеры для сериализации json: https://www.newtonsoft.com/json/help/html/SerializeObject.htm

Кстати, я считаю, что SqlServer также использует newtonsoft.json внутри.

...