2010-09-26 56 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