【原】Function Import in Entity Framework 4 issue

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

有以下两种解决方法:

1. 修改T4 模板:

 

ExpandedBlockStart.gif 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 

 

 

 

转载于:https://www.cnblogs.com/luckylei66/archive/2012/03/10/2389108.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值