luckylei66

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

在使用ADO.NET POCO T4 模板为存储过程生成方法时,发现无法为没有返回值的存储过程添加方法。例如:spDeleteCustomer.sql

有以下两种解决方法:

1. 修改T4 模板:

 

View Code
        region.Begin("Function Imports");

        foreach (EdmFunction edmFunction in container.FunctionImports)
        {
            object returnParameter = edmFunction.ReturnParameter; // MG added 02-29-2012 - fix to handle no return type

            var parameters = FunctionImportParameter.Create(edmFunction.Parameters, code, ef);
            string paramList = String.Join("", parameters.Select(p => p.FunctionParameterType + " " + p.FunctionParameterName).ToArray());
            // MG modified 02-29-2012 - fix to handle no return type
            
//if (edmFunction.ReturnParameter == null)
            
//{
            
//    continue;
            
//}
            
//string returnTypeElement = code.Escape(ef.GetElementType(edmFunction.ReturnParameter.TypeUsage));

            
// MG added 02-29-2012 - fix to handle no return type
            string returnTypeElement = returnParameter == null ? string.Empty : code.Escape(ef.GetElementType(edmFunction.ReturnParameter.TypeUsage));
            string returnTypeString;
            string returnString;
            
            if(!string.IsNullOrEmpty(returnTypeElement)) {
                returnTypeString = string.Concat("ObjectResult<", returnTypeElement, ">");
                returnString = string.Concat("base.ExecuteFunction<", returnTypeElement, @">(""", edmFunction.Name, @"""", code.StringBefore("", String.Join("", parameters.Select(p => p.ExecuteParameterName).ToArray())), ");");
            } else {
                returnTypeString = "int";
                returnString = string.Concat(@"base.ExecuteFunction(""", edmFunction.Name, @"""", code.StringBefore("", String.Join("", parameters.Select(p => p.ExecuteParameterName).ToArray())), ");");
            }

// MG modified 02-29-2012 - fix to handle no return type. Updated return type in line below:
#>
    <#=Accessibility.ForMethod(edmFunction)#> <#=returnTypeString#> <#=code.Escape(edmFunction)#>(<#=paramList#>)
    {
<#
            foreach (var parameter in parameters)
            {
                if (!parameter.NeedsLocalVariable)
                {
                    continue;
                }
#>

        ObjectParameter <#=parameter.LocalVariableName#>;

        if (<#=parameter.IsNullableOfT ? parameter.FunctionParameterName + ".HasValue" : parameter.FunctionParameterName + " != null"#>)
        {
            <#=parameter.LocalVariableName#> = new ObjectParameter("<#=parameter.EsqlParameterName#>", <#=parameter.FunctionParameterName#>);
        }
        else
        {
            <#=parameter.LocalVariableName#> = new ObjectParameter("<#=parameter.EsqlParameterName#>"typeof(<#=parameter.RawClrTypeName#>));
        }
<#
            }
#>
        return <#=returnString#>
    }
<#
        }

        region.End();

 

2. 为存储过程添加返回值:

 

BEGIN         
    ...      
    SELECT @@ROWCOUNT 
END 

 

 

 

posted on 2012-03-10 14:52  Leo.Wang  阅读(598)  评论(0编辑  收藏  举报