Импорт функции обновления не отображается в файле контекста - PullRequest
0 голосов
/ 26 сентября 2010

Я использую EF4, и я использовал генератор сущностей POCO для создания моих сущностей.У меня есть хранимая процедура под названием UpdateApplicationState.Я передаю ему только 2 параметра, которые называются ApplicationID и ApplicationStateID.Он ничего не возвращает, поэтому я установил тип возвращаемого значения как None.Я только хочу обновить идентификатор состояния приложения, ничего больше.Когда я создаю свой импорт функции для этой хранимой процедуры, я не вижу его в моем файле контекста в разделе «Импорт функций».Почему это?Это тогда создано в другом месте?Как бы я назвал этот метод?

РЕДАКТИРОВАТЬ:

Нет здесь никого, кто может помочь мне здесь?Все, что я хочу сделать, это вызвать эту функцию импорта (которая не в контексте), как и другие мои функции импорта в моем классе репозитория:

public void UpdateApplicationState(int applicationID, int applicationStateID) 
{ 
   context.UpdateApplicationState(applicationID, applicationStateID); 
}

И с моей точки зрения:

applicationRepository.UpdateApplicationState(id, newApplicationStateID);

Вот моя хранимая процедура:

ALTER PROCEDURE [dbo].[UpdateApplicationState] 
( 
   @ApplicationID INT, 
   @ApplicationStateID INT 
) 

AS 

BEGIN 

   UPDATE 
      [Application] 
   SET 
      ApplicationStateID = @ApplicationStateID 
   WHERE 
      ApplicationID = @ApplicationID; 

END

Спасибо

1 Ответ

5 голосов
/ 01 марта 2011

Проблема заключается в том, что шаблон, предоставляемый с 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 поймет это и сделает изменения для нас в следующей версии.

...