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

9
我已经创建了一个存储过程,该过程需要参数来创建一个用户。如果用户已经存在,则将输出参数设置为“用户已存在”,并不执行任何其他操作。
现在我将此函数(InsertNewUser)映射到我的实体框架中,并像下面这样调用它:
context.InsertNewUser(email, name, passwordhash, salt, ???)
其中的???是我遇到问题的地方。在存储过程中,此参数是一个输出参数。我尝试声明一个字符串,然后传入“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 /* 将用户保存到数据库中。 */ BEGIN --首先检查用户是否不存在 IF EXISTS (SELECT eMail FROM UserSet WHERE eMail = @eMail) --返回用户存在 SET @output = '用户已存在' ELSE INSERT INTO UserSet VALUES (@eMail, @firstName, @lastName, @passwordHash, @salt) END
3个回答

11
您也可以这样写:
string output = "";    
context.InsertNewUser(email, name, passwordhash, salt, ref output)

这么简单,为什么我没想到用ref呢?只是试了一下。 - Phil

6

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

// 这段代码提供参数
System.Data.Objects.ObjectParameter parameter = new ObjectParameter("output", "nvarchar(256)");
// 这段代码包含返回的值
ObjectResult result = context.CheckIfUserExists(eMail, parameter);

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。

我也实现了生成密钥的序列,但如果事务失败,我无法执行回滚。你是如何处理的? - AGH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接