使用Subsonic 3.0.0.3,看起来有一些问题,A2onic将存储过程参数识别为输出参数。
在StoredProcedures.cs类中,我找到了我的存储过程定义,但最后一个参数被错误地定义为“AddParameter”。
sp.Command.AddParameter("HasPermission",HasPermission,DbType.Boolean);
当我执行sp.Execute()并尝试读取sp.Command.OutputValues [0]的值时,该值为null。
如果编辑定义是这样的话;
sp.Command.AddOutputParameter("HasPermission", DbType.Boolean);
然后返回值并且是正确的值类型
我不确定我是如何“修复”这个 - 因为每次通过“运行自定义工具”重新生成SP类时,参数定义都需要编辑。我应该以某种方式编辑T4模板吗?
请告知。
编辑:我忘了提到我正在使用MS SQL 2008(10.0.2531)答案 0 :(得分:0)
希望亚音速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#>);