2010-10-16 95 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

相关问题