При исследовании файла 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.