Параметр значения таблицы хранимых процедур Entity Framework

Я пытаюсь вызвать хранимую процедуру, которая принимает параметр значения таблицы. Я знаю, что это напрямую не поддерживается в Entity Framework, но насколько я понимаю, вы можете сделать это с помощью команды ExecuteStoreQuery из ObjectContext . У меня есть общий репозиторий инфраструктуры сущностей, где у меня есть следующий метод ExecuteStoredProcedure :

public IEnumerable ExecuteStoredProcedure(string procedureName, params object[] parameters)
{
    StringBuilder command = new StringBuilder();
    command.Append("EXEC ");
    command.Append(procedureName);
    command.Append(" ");

    // Add a placeholder for each parameter passed in
    for (int i = 0; i < parameters.Length; i++)
    {
        if (i > 0)
            command.Append(",");

        command.Append("{" + i + "}");
    }

    return this.context.ExecuteStoreQuery(command.ToString(), parameters);
}

Командная строка заканчивается следующим образом:

EXEC someStoredProcedureName {0},{1},{2},{3},{4},{5},{6},{7}

Я попытался запустить этот метод для хранимой процедуры, которая принимает таблицу с оценкой параметр, и он ломается. Я прочитал здесь , что параметры должны иметь тип SqlParameter , а параметр с табличным значением должен иметь для SqlDbType значение Structured . Я сделал это и получил сообщение об ошибке:

The table type parameter p6 must have a valid type name

Итак, я установил SqlParameter.TypeName на имя определяемого пользователем типа, который я создал в базе данных, а затем, когда я запускаю запрос, я получаю следующую действительно полезную ошибку:

Incorrect syntax near '0'.

Я могу получить выполнение запроса, если вернусь к ADO.NET и выполню программу чтения данных, но я надеялся заставить ее работать с использованием контекста данных.

Есть ли способ передать параметр значения таблицы с помощью ExecuteStoreQuery ? Кроме того, я использую Entity Framework Code First и преобразую DbContext в ObjectContext , чтобы получить доступный метод ExecuteStoreQuery . Это необходимо, или я могу сделать это и с DbContext ?

64
задан SharpC 23 October 2017 в 12:06
поделиться