Как вызвать хранимую процедуру с табличным параметром из .net core Entity Framework - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть хранимая процедура с табличным параметром.Мне нужно вызвать его из среды Entity в ядре .net.

Я не смог найти API для объекта контекста.

Я пробовал использовать API ADO.net, и это сработало, но теперь янадо вызывать его из EF в .net core.Хранимая процедура, которую я должен вызвать, возвращает результат, который мне нужно перехватить.

Мой пример SP, как показано ниже

CREATE PROCEDURE [dbo].[GetMyData] 
@MyRequest [dbo].[MyRequestType] Readonly
As 
BEGIN

--Its sample SP thats why returned request table as it is    
select * from @MyRequest


END

MyRequestType, определяется пользователем как тип таблицы

его структура такая, как показано ниже

CREATE TYPE [dbo].[MyRequestType] AS TABLE(
    [Id] [numeric](22, 8) NULL,
    [Col1] [bigint] NULL,
    [Col2] [numeric](22, 8) NULL 
) 

Я использую подход Code first в ядре EF

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 22 февраля 2019

Наконец-то я смог вызвать параметр «Значения таблицы» Хранимую процедуру из своей службы ядра .net, которая использует ядро ​​EF

Я создал поддельную модель домена отклика

   public class MyResponse
    {
        public int Id { get; set; }
        public int Col1{ get; set; }
        public int Col2 { get; set; } 
    }

Я назвал ее FakeМодель домена, потому что модель домена, как правило, представляет собой табличное представление в классе CLR, но у меня нет такой таблицы в SQL Server.

Затем я добавил свойство для этого в классе контекста, как показано ниже

public class MyQueryDbContext : DbContext
{
  public virtual DbSet<MyResponse> Data { get; set; }
    .
    .
    .
}

ТогдаНеобходимо создать таблицу данных для списка параметров запроса, я добавил, как показано ниже:

 DataTable table = new DataTable();
 table.Columns.Add("Id", typeof(int));
 table.Columns.Add("Col1", typeof(int));
 table.Columns.Add("Col2", typeof(int));

Затем я вызвал хранимую процедуру из API ядра .net, используя EF, и передал datatable в качестве параметра, как показано ниже

 var parameter = new SqlParameter("@MyRequest", SqlDbType.Structured);
 parameter.Value = table;
 parameter.TypeName = "[dbo].[MyRequestType]" // My Table valued user defined type
var response=_context.Data
                     .FromSql("EXEC [dbo].[GetMyData] @MyRequest", parameter)
                     .ToList()

Вы получите ответ в своей переменной ответа.

...