在调查 POCO .Context.tt 文件时,我在第 111 行附近发现了以下代码
if (edmFunction.ReturnParameter == null)
{
continue;
}
string returnTypeElement = code.Escape(ef.GetElementType(edmFunction.ReturnParameter.TypeUsage));
这意味着任何返回 'none' 的函数导入都不会被写入。
我已经修改了我的.Context.tt 文件,以便将上面的代码替换为
string returnTypeElement = @"";
if (edmFunction.ReturnParameter == null)
{
returnTypeElement = @"void";
} else {
returnTypeElement = code.Escape(ef.GetElementType(edmFunction.ReturnParameter.TypeUsage));
}
然后我不得不在函数声明周围添加一些检查(大约第 118 行)
<#
if(returnTypeElement != "void"){
#>
<#=Accessibility.ForMethod(edmFunction)#> ObjectResult<<#=returnTypeElement#>> <#=code.Escape(edmFunction)#>(<#=paramList#>)
<#
} else {
#>
<#=Accessibility.ForMethod(edmFunction)#> <#=returnTypeElement#> <#=code.Escape(edmFunction)#>(<#=paramList#>)
<#
}
#>
和返回语句(大约第 142 行)
<#
if(returnTypeElement != "void"){
#>
return base.ExecuteFunction<<#=returnTypeElement#>>("<#=edmFunction.Name#>"<#=code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray()))#>);
<#
} else {
#>
base.ExecuteFunction("<#=edmFunction.Name#>"<#=code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray()))#>);
<#
}
#>
现在,这可能不是最优雅的解决方案(硬编码字符串!),但这确实意味着我可以在不返回任何内容并在 .Context.cs 中创建相应函数的存储过程上使用函数导入文件,因此可以通过 Intellisense 访问。