【原】Function Import in Entity Framework 4 issue

來源:互聯網
上載者:User

在使用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 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.