Проблема заключается в том, что шаблон, предоставляемый с EOC4 POCO, не обрабатывает импорт функций, которые не имеют возвращаемого типа.Вы можете установить скалярный тип возвращаемого значения или изменить файл YourProject.Context.tt для решения проблемы.
Найдите в файле раздел, начинающийся с:
region.Begin("Function Imports");
Затем чуть дальше вы увидите блок кода, подобный следующему:
if (edmFunction.ReturnParameter == null)
{
continue;
}
string returnTypeElement = code.Escape(ef.GetElementType(edmFunction.ReturnParameter.TypeUsage));
Вы можете заменить его следующим:
string returnTypeElement = edmFunction.ReturnParameter == null
? null : code.Escape(ef.GetElementType(edmFunction.ReturnParameter.TypeUsage));
Затем найдите два использования returnTypeElement
вследующие несколько строк.Первый находится в определении метода:
<#=Accessibility.ForMethod(edmFunction)#> ObjectResult<<#=returnTypeElement#>>
Заменить на:
<#=Accessibility.ForMethod(edmFunction)#> <#= returnTypeElement == null ? "int" : ("ObjectResult<" + returnTypeElement + ">") #>
Следующее - еще несколько строк в операторе возврата:
return base.ExecuteFunction<<#=returnTypeElement#>>
Замените на:
return base.ExecuteFunction<#= returnTypeElement == null ? "" : ("<" + returnTypeElement + ">")#>
Теперь вы должны убедиться, что он правильно генерирует методы для импорта функций.Возможно, команда EF4 поймет это и сделает изменения для нас в следующей версии.