调用带有输出参数的实体框架过程出错

本文关键字:实体 框架 过程 出错 参数 输出 调用 | 更新日期: 2023-09-27 18:12:00

我正在尝试保存我的密码。

这是我的进程,它返回我的pw作为nvarchar(512):

alter proc [dbo].g_GetPWFromEmail
@emailAddress nvarchar(50),
@EncrPass nvarchar(512) OUTPUT
as
if ((Select count(*) from users  where emailAddress = @emailAddress) > 0)
begin
    select @EncrPass =  password 
    from users 
    where emailAddress = @emailAddress
end
else
begin
    select @EncrPass =  ''
end
下面是emdx文件中包含的内容:
public virtual ObjectResult<string> g_GetPWFromEmail(string emailAddress, ObjectParameter encrPass)
{
    var emailAddressParameter = emailAddress != null ?
        new ObjectParameter("emailAddress", emailAddress) :
        new ObjectParameter("emailAddress", typeof(string));
    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<string>("g_GetPWFromEmail", emailAddressParameter, encrPass);
}

当我调用它时,它会出错…我不知道该怎么称呼它——这是我目前为止写的:

//Pull Current Encrypted Password from DB
string DbPw = "";
ObjectParameter DBPW1 = null;
var DbPassWord =  databaseManager.g_GetPWFromEmail(model.Username, DBPW1).ToList();
if (DbPassWord != null && DbPassWord.Count() > 0)
{
     DbPw = Convert.ToString(DBPW1);
}

我如何调用这个从DB返回我的哈希pw ?我知道有一个更好的方法,但我尝试了几种方法,不能得到完全正确的语法

调用带有输出参数的实体框架过程出错

如果您的用例真的这么简单,那么常规的LINQ-to-Entities就可以了,假设您已经将表设置为实体:

using (var context = new MyContext()) {
    string encryptedPassword = context.Users
        .Where(u => u.emailAddress == emailAddress)
        .Select(u => u.password)
        .SingleOrDefault();
}

传入一个空引用(DPBW1)到方法中。因此,该方法不能用输出值更新该引用。

ObjectParameter DBPW1 = null;
var DbPassWord =  databaseManager.g_GetPWFromEmail(model.Username, DBPW1).ToList();

我没有在EF中这样做,但在SQL ADO中。. NET中,您仍然创建参数并将参数方向标记为Output,然后在进程运行后,填充参数值。

你应该可以在这里做同样的事情。

EDIT看起来ObjectParameter没有定义参数方向。也许它是自动完成的-我必须尝试一下,看看它是否有效。

var DPBW1 = new ObjectParameter("EncrPass", typeof(string));

EDIT不需要设置参数方向