【问题标题】:Getting stored procedure output parameter with LINQ and Entity Framework使用 LINQ 和实体框架获取存储过程输出参数
【发布时间】:2011-04-26 09:58:47
【问题描述】:

我创建了一个使用参数来创建用户的存储过程。如果用户已经存在,它将输出参数设置为“用户已经存在”并且什么也不做。

现在我已将此函数 (InsertNewUser) 映射到我的实体框架,并像这样调用它:

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

???是我遇到麻烦的地方。在存储过程中,此参数是一个 OUTPUT 参数。我尝试声明一个字符串,然后传入“out declaredString”,但这是不正确的。

我不确定我的方法是否正确,有什么想法吗?

这是存储过程:

更改程序 dbo.InsertNewUser ( @eMail nvarchar(256), @firstName nvarchar(256), @lastName nvarchar(256), @passwordHash nvarchar(256), @salt nvarchar(256), @output nvarchar(256) 输出 ) 作为 /* 将用户保存到数据库。 */ 开始 --首先检查用户是否不存在 如果存在(从用户集中选择电子邮件,其中电子邮件 = @eMail) --返回该用户存在 SET @output = '用户存在' 别的 插入用户集 值(@eMail、@firstName、@lastName、@passwordHash、@salt) 结尾

【问题讨论】:

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


    【解决方案1】:

    你也可以这样写:

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

    【讨论】:

    • 所以.. 很多.. 更容易.. 为什么我没有想到 ref?!只试过
    【解决方案2】:

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

    //这将提供参数 System.Data.Objects.ObjectParameter 参数 = new ObjectParameter("output", "nvarchar(256)"); //这将包含返回值 ObjectResult 结果 = context.CheckIfUserExists(eMail, parameter);

    【讨论】:

      【解决方案3】:

      我用下面的代码解决了:

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

      使用实体框架 6

      【讨论】:

      • 我还实现了生成密钥的序列,但如果事务失败,我无法回滚。你是怎么做到的?
      猜你喜欢
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 2018-03-24
      • 2011-12-30
      相关资源
      最近更新 更多