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

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

public IEnumerable<T> ExecuteStoredProcedure<T>(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<T>(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 также?

Ответы на вопрос(6)

Ваш ответ на вопрос