使用LINQ和Entity Framework获取存储过程输出参数

时间:2010-10-16 19:47:48

标签: c# linq linq-to-sql stored-procedures

我创建了一个存储过程,它接受参数来创建用户。如果用户已存在,则将输出参数设置为“用户已存在”,并且不执行任何操作。

现在我已经将这个函数(InsertNewUser)映射到我的Entity Framework,并且我这样调用它:

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

3 个答案:

答案 0 :(得分:10)

你也可以用以下方式写作:

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

答案 1 :(得分:6)

我用这段代码解决了它:

//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);

答案 2 :(得分:1)

我用以下代码解决了这个问题:

//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();

使用Entity Framework 6