Хранимая процедура с пользовательской таблицей в качестве параметра с использованием EF

#c# #sql #sql-server #entity-framework #tsql

#c# #sql #sql-сервер #entity-framework #tsql

Вопрос:

Мне нужно передать список строк в мою хранимую процедуру Sp_Calculate_TimeSheet_Global_Info , поэтому я создал эти два типа :

 CREATE TYPE [dbo].[Type_cmd] AS TABLE (
[TypeName] [varchar](50) NULL
)
GO
CREATE TYPE [dbo].[Etape_cmd] AS TABLE (
[EtapeName] [varchar](50) NULL
)
GO   
  

сигнатура хранимой процедуры следующая :

 DECLARE @return_value int

EXEC    @return_value = [dbo].[Sp_Calculate_TimeSheet_Global_Info]
        @DateDebut = NULL,
        @DateFin = NULL,
        @UserId = NULL,
        @CA = NULL,
        @Client = NULL,
        @EtapeName = NULL,
        @TypeName = NULL

SELECT  'Return Value' = @return_value

GO
  

Проблема в том, что когда я сначала использовал базу данных EF, и я попытался получить эту процедуру в модели

 public virtual int Sp_Calculate_TimeSheet_Global_Info(Nullable<System.DateTime> dateDebut, Nullable<System.DateTime> dateFin, Nullable<int> userId, string cA, string client)
        {
            var dateDebutParameter = dateDebut.HasValue ?
                new ObjectParameter("DateDebut", dateDebut) :
                new ObjectParameter("DateDebut", typeof(System.DateTime));

            var dateFinParameter = dateFin.HasValue ?
                new ObjectParameter("DateFin", dateFin) :
                new ObjectParameter("DateFin", typeof(System.DateTime));

            var userIdParameter = userId.HasValue ?
                new ObjectParameter("UserId", userId) :
                new ObjectParameter("UserId", typeof(int));

            var cAParameter = cA != null ?
                new ObjectParameter("CA", cA) :
                new ObjectParameter("CA", typeof(string));

            var clientParameter = client != null ?
                new ObjectParameter("Client", client) :
                new ObjectParameter("Client", typeof(string));

            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("Sp_Calculate_TimeSheet_Global_Info", dateDebutParameter, dateFinParameter, userIdParameter, cAParameter, clientParameter);
        }
  

пользовательские таблицы не распознаются!!!

Итак, мне нужно знать, как я могу решить эту проблему?

Комментарии:

1. Я полагаю, что они (табличные параметры) не поддерживаются EF, и поэтому вам придется выполнить свою процедуру вручную.

2. @Evk как я могу выполнить это вручную

3. Использование табличных параметров в Entity Framework

4. Просто сделайте обычный запрос (используя SqlCommand)