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 
  • 相关阅读:
    linux基础命令:alias
    linux基础命令:find
    Linux下which、whereis、locate命令的区别
    逆元知识普及(进阶篇) ——from Judge
    BZOJ 3620: 似乎在梦中见过的样子
    HDU contest808 ACM多校第7场 Problem
    P3203 [HNOI2010]弹飞绵羊 —— 懒标记?分块?LCT?...FAQ orz
    可持久化数组(线段树)[模板题]
    可持久化并(xian)查(duan)集(shu)
    主席树(静态)的轻松入门
  • 原文地址:https://www.cnblogs.com/luckylei66/p/2389108.html
Copyright © 2011-2022 走看看