2015-06-04 25 views
0

我已經編寫了一個存儲過程,如果找到,將返回一行的ID,如果未找到,將創建一行並返回新創建行的ID。我在C#函數中檢索返回值時遇到問題。無法讀取使用實體框架從存儲過程返回的值


存儲過程:

PROCEDURE [TagDatabase].[GetTagID] 
    -- Add the parameters for the stored procedure here 
    @TagName as varchar(200), 
    @UserID int = 0, 
    @TagID int = 0 OUTPUT 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 
    select @TagID=ID from Tag where Name = @TagName and [email protected]; 
    IF NULLIF(@TagID, '') IS NULL 
    BEGIN 
     DECLARE @OutputTbl TABLE (ID INT) 

     INSERT INTO Tag(Name, ParentID, UserID) 
     OUTPUT INSERTED.ID INTO @OutputTbl(ID) 
     VALUES (@TagName, 0, @UserID); 

     select @TagID=ID from @OutputTbl 


    END 

    select @TagID 
END 

我的函數來獲取這個返回的值:

ObjectParameter objParam = new ObjectParameter("TagID", typeof(long)); 

context.GetTagID("newTag", 10, objParam); 
context.SaveChanges(); 
long id = Convert.ToInt64(Convert.ToInt64(id))); 

回答

0

變化

LON g id = Convert.ToInt64(Convert.ToInt64(id)));

長ID = Convert.ToInt64(objParam.Value);

+0

您建議的表達式總是返回0.而如果我在SQL服務器管理工​​作室上運行相同的過程,則它工作得很好。事實上,objParam.Value總是被接收爲null。 – labyrinth

+0

我不知道爲什麼這不起作用,您是否在代碼中保留最終選擇的@TagID?這將返回一個結果集,但您仍應該能夠獲取輸出參數。我唯一能想到的其他事情是將typeof(long)更改爲typeof(int)以匹配存儲的proc參數。 – Mike

+0

類似的線程http://stackoverflow.com/questions/10339750/entity-framework-stored-procedure-return-value?rq=1 – Mike

相關問題