2010-09-26 55 views
0

我正在使用EF4,并使用POCO实体生成器来创建我的实体。我有一个名为UpdateApplicationState的存储过程。我只传递了两个名为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 

感谢

回答

5

的问题是,模板提供机智h 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)); 

然后在接下来的几个lin寻找returnTypeElement的两个用法ES。首先是在方法定义:

<#=Accessibility.ForMethod(edmFunction)#> <#= returnTypeElement == null ? "int" : ("ObjectResult<" + returnTypeElement + ">") #> 

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

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

替换为:

<#=Accessibility.ForMethod(edmFunction)#> ObjectResult<<#=returnTypeElement#>> 

替换为

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

现在你应该找到t它会正确生成函数导入的方法。也许EF4团队会接受并在下一个版本中对我们进行修改。

+0

我注意到这个问题,你认为这是有意的还是这个错误? – 2011-04-06 13:33:02

+0

@Julien - 我很确定这是一个错误。我已经看到我的代码作为解决方案粘贴在其他一些网站上,所以我相信MS会在下一次发布时选择它,如果它们还没有的话。 – 2011-04-15 17:32:41