Я пытаюсь вызвать хранимую процедуру, которая принимает параметр значения таблицы. Я знаю, что это не поддерживается напрямую в Entity Framework, но из того, что я понимаю, вы можете сделать это, используя команду ExecuteStoreQuery off 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, и параметр table value должен иметь SqlDbType, установленный на Structured. Поэтому я сделал это, и я получил сообщение об ошибке:
The table type parameter p6 must have a valid type name
Итак, я устанавливаю имя SqlParameter.TypeName в имя определяемого пользователем типа I, созданного в базе данных, а затем, когда я запускаю запрос, я получаю следующую по-настоящему полезную ошибку:
Incorrect syntax near '0'.
Я могу запустить запрос, если вернусь обратно к ADO.NET и запустил программу чтения данных, но я надеялся заставить ее работать с использованием контекста данных.
Есть ли способ передать параметр значения таблицы с помощью ExecuteStoreQuery? Кроме того, я фактически использую Entity Framework Code First и набрасываю DbContext на ObjectContext, чтобы получить доступный метод ExecuteStoreQuery. Это необходимо или я могу сделать это против DbContext?