更新功能导入不在上下文文件中显示

Bre*_*ogt 0 .net entity entity-framework

我正在使用EF4,我使用POCO实体生成器来创建我的实体.我有一个名为UpdateApplicationState的存储过程.我只传递了2个名为ApplicationID和ApplicationStateID的参数.它什么都不返回,所以我将返回类型设置为None.我只希望它更新应用程序状态ID,没有别的.当我为此存储过程创建函数导入时,我在"函数导入"下的上下文文件中看不到它.为什么是这样?它是在另一个地方创建的吗?我怎么称呼这种方法?

编辑:

这里没有人可以帮助我吗?我想要做的就是调用这个导入函数(不在上下文中),就像我在我的存储库类中执行其他导入函数一样:

public void UpdateApplicationState(int applicationID, int applicationStateID) 
{ 
   context.UpdateApplicationState(applicationID, applicationStateID); 
}
Run Code Online (Sandbox Code Playgroud)

从我的观点来看:

applicationRepository.UpdateApplicationState(id, newApplicationStateID);
Run Code Online (Sandbox Code Playgroud)

这是我的存储过程:

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

AS 

BEGIN 

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

END
Run Code Online (Sandbox Code Playgroud)

谢谢

Mat*_*int 5

问题是EF4 POCO提供的模板不处理没有返回类型的函数导入.您可以设置标量返回类型,也可以修改YourProject.Context.tt文件来解决问题.

在文件中查找以以下内容开头的部分:

region.Begin("Function Imports");
Run Code Online (Sandbox Code Playgroud)

然后你会看到一个像这样的代码块:

if (edmFunction.ReturnParameter == null)
{
    continue;
}
string returnTypeElement = code.Escape(ef.GetElementType(edmFunction.ReturnParameter.TypeUsage));
Run Code Online (Sandbox Code Playgroud)

您可以使用以下内容替换它:

string returnTypeElement = edmFunction.ReturnParameter == null
    ? null : code.Escape(ef.GetElementType(edmFunction.ReturnParameter.TypeUsage));
Run Code Online (Sandbox Code Playgroud)

然后returnTypeElement在接下来的几行中寻找两种用法.第一个是方法定义:

<#=Accessibility.ForMethod(edmFunction)#> ObjectResult<<#=returnTypeElement#>> 
Run Code Online (Sandbox Code Playgroud)

用...来代替:

<#=Accessibility.ForMethod(edmFunction)#> <#= returnTypeElement == null ? "int" : ("ObjectResult<" + returnTypeElement + ">") #> 
Run Code Online (Sandbox Code Playgroud)

接下来是return语句中的几行:

return base.ExecuteFunction<<#=returnTypeElement#>>
Run Code Online (Sandbox Code Playgroud)

用...来代替:

return base.ExecuteFunction<#= returnTypeElement == null ? "" : ("<" + returnTypeElement + ">")#>
Run Code Online (Sandbox Code Playgroud)

现在您应该发现它正确生成函数导入的方法.也许EF4团队会接受这一点,并在下一版本中对我们进行修改.