Subsonic 3 не может определить выходной параметр хранимой процедуры - PullRequest
1 голос
/ 13 сентября 2009

Привет, используя Subsonic 3.0.0.3, похоже, что есть некоторая проблема с Subsonic, определяющим параметры хранимой процедуры в качестве выходных параметров.

В классе StoredProcedures.cs я нахожу определение своей хранимой процедуры, но последний параметр неправильно определен как «AddParameter».

sp.Command.AddParameter("HasPermission",HasPermission,DbType.Boolean);

Когда я выполняю процедуру sp.Execute () и пытаюсь прочитать значение sp.Command.OutputValues ​​[0], значение равно нулю.

Если определение отредактировано таким образом;

sp.Command.AddOutputParameter("HasPermission", DbType.Boolean);

Тогда значение возвращается и является правильным типом значения

Я не уверен, как мне это «исправить» - поскольку каждый раз, когда я регенерирую класс SP с помощью «Run Custom Tool», определения параметров требуют редактирования. Должен ли я как-то отредактировать шаблон T4?

Пожалуйста, сообщите.

РЕДАКТИРОВАТЬ: я забыл упомянуть, что я использую MS SQL 2008 (10.0.2531)

1 Ответ

0 голосов
/ 04 апреля 2010

Надеялся на дозвуковую 3.0.0.4, это было исправлено, но, к сожалению, нет. Исправление может быть сделано после этой записи в блоге; http://brianmrush.wordpress.com/2010/01/15/subsonic-and-t4-templates/

В основном добавьте это в SQLServer.ttinclude;

p.ParameterDirection = GetParamDirection(row["PARAMETER_MODE"].ToString());

И объявление этого метода в SQLServer.ttinclude;

string GetParamDirection(string paramMode)
{
    switch (paramMode)
    {
    case "IN":
        return "ParameterDirection.Input";
    case "INOUT":
        return "ParameterDirection.InputOutput";
        case "OUT":
        return "ParameterDirection.Output";
    case "RETURN":
        return "ParameterDirection.ReturnValue";
    default:
        return "ParameterDirection.Input";
    }
}

Затем в файле StoredProcedure.tt измените строку 21, чтобы она выглядела так:

sp.Command.AddParameter("<#=par.Name#>",<#=par.CleanName#>,DbType.<#=par.DbType#>);
...