2013-05-20 42 views
3

我在我的商店中添加了一個存儲過程,它在我的模型中創建了一個函數導入,並且我將返回類型設置爲無,因爲存儲過程僅執行插入或更新。實體框架,帶返回值類型的函數導入:無..返回int?

然而,生成的ObjectContext方法返回一個int,而不是void。當我執行這個方法時,它的工作原理是,這個值是-1。

這是怎麼回事?

[編輯]

的存儲過程是簡單,看起來像這樣:

SET NOCOUNT ON 
UPDATE Notes SET vchType = @Type, iPriority=5 WHERE iNoteNumber = @NoteID 

沒有應該返回,並如果我執行到一個變量,我會想它會是零,就像在SSMS中:

DECLARE @return_value int 

    EXEC @return_value = [CNRD].[UpdateNoteType] 
      @NoteID = 12345, 
      @Type = N'REGULAR' 

    SELECT 'Return Value' = @return_value 
    ------------------------------------------ 
    [ Return Value ] 
    0 

這裏是它是如何映射:

SPROC mapping function import generated method

+0

你可以顯示代碼,也許是你如何導入函數的截圖? –

+1

我會抓取一些截圖並編輯問題 – JoeBrockhaus

回答

1

非查詢方法,請參見備註這裏:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

對於UPDATE,INSERT和DELETE語句,返回值是 受命令影響的行數。當插入或更新的 表中存在觸發器時,返回值包括受插入或更新操作影響的行的編號 以及受觸發器或觸發器影響的行的編號 。對於所有其他類型的 語句,返回值爲-1。如果發生回滾,則返回值 的值也是-1。

+1

這與EntityFramework無關。 OP應該如何使用這種方法? –

+1

鏈接解釋並引用「對於所有其他類型的語句,返回值爲-1,如果發生回滾,返回值也是-1。」實體框架只是返回它從SP獲得的值。所以我同意它與EF有關。當EF詢問「當我執行此方法並且它有效時,此值爲-1」時,EF被要求稱爲SP並且SP最有可能返回-1似乎與我相關。「試圖幫助解釋。 –

+0

好的。我認爲你的答案不清楚。在EF中,當你導入一個SP時,你需要知道它應該返回什麼。如果你選擇'None',包裝器EF在SP周圍產生,不管從SP返回的是什麼,都會返回'void'。 –