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

时间:2010-09-26 09:40:30

标签: .net entity-framework entity

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

编辑:

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

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 个答案:

答案 0 :(得分:5)

问题是EF4 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语句中还有几行:

return base.ExecuteFunction<<#=returnTypeElement#>>

替换为:

return base.ExecuteFunction<#= returnTypeElement == null ? "" : ("<" + returnTypeElement + ">")#>

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