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

Phi*_*hil 9 c# linq stored-procedures linq-to-sql

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

现在我已将此函数(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

For*_*ore 11

您也可以通过以下方式编写:

string output = "";    
context.InsertNewUser(email, name, passwordhash, salt, ref output)
Run Code Online (Sandbox Code Playgroud)


Phi*_*hil 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);