2010-10-16 74 views
6

我創建了一個存儲過程,該參數用於創建用戶。如果用戶已經存在,則將輸出參數設置爲「用戶已存在」,並且不再執行任何操作。使用LINQ和實體框架獲取存儲過程輸出參數

現在我已經映射了該功能(InsertNewUser)到我的實體框架和我調用它像這樣:

 
context.InsertNewUser(email, name, passwordhash, salt, ???) 

的???是我遇到麻煩的地方。在存儲過程中,這個參數是一個OUTPUT參數。我試着聲明一個字符串,然後傳入「out declaredString」,但這是不正確的。

我不確定我會以正確的方式去思考這個問題嗎?

這是存儲過程:

 
ALTER PROCEDURE dbo.InsertNewUser 

    (
    @eMail nvarchar(256), 
    @firstName nvarchar(256), 
    @lastName nvarchar(256), 
    @passwordHash nvarchar(256), 
    @salt nvarchar(256), 
    @output nvarchar(256) OUTPUT 
    ) 

AS 
    /* Saves a user to the db. */ 
    BEGIN 
    --First check if the user doesn't exist 
    IF EXISTS (SELECT eMail FROM UserSet WHERE eMail = @eMail) 
     --Return that user exists 
     SET @output = 'User exists' 
    ELSE  
     INSERT INTO UserSet 
     VALUES (@eMail, @firstName, @lastName, @passwordHash, @salt) 
    END 

回答

5

我用這個代碼解決它:

 
//This will provide the parameter 
System.Data.Objects.ObjectParameter parameter = new ObjectParameter("output", "nvarchar(256)"); 
//This will contain the returned values 
ObjectResult result = context.CheckIfUserExists(eMail, parameter); 
10

你也可以寫下列方式:

string output = "";  
context.InsertNewUser(email, name, passwordhash, salt, ref output) 
+0

so .. much .. easy ..爲什麼我沒有想到ref ?!只試過了 – Phil 2010-10-22 14:45:38

0

我解決了它用以下代碼:

//Execute stored procedure 
ObjectParameter newkey = new ObjectParameter("newKey", typeof(char)); 
db.RF_GetNewKey("A", "B", "S",newkey); 

//get new key output from stored procedure RF_GetNewKey 
string myKey=newkey.Value.ToString(); 

With Entity Framework 6

相關問題