zoukankan      html  css  js  c++  java
  • 【原】Function Import in Entity Framework 4 issue

    在使用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 
  • 相关阅读:
    用纹理贴图模拟反射,NeHe23课球面映射相关
    VS2010: CommandLine Warning D9025
    【转】C RunTime Library 暨 深入理解编译选项的含义 01
    让Doxygen输出中文注释不乱码
    windows环境下memcache配置
    C#中英文字符长度截取
    apache 的工作原理
    pear包安装phpunit
    使用 libevent 和 libev 提高网络应用性能
    PHP发明人谈MVC和网站设计架构——貌似他不支持php用mvc
  • 原文地址:https://www.cnblogs.com/luckylei66/p/2389108.html
Copyright © 2011-2022 走看看