EF函数的返回值不能正确返回值?

时间:2017-09-27 14:02:12

标签: c# entity-framework

SQL Server存储过程:

ALTER PROCEDURE [dbo].[SP_ValidateUser] 
    (@useremail varchar(100),
     @password varchar(100))    
AS
BEGIN
    SET NOCOUNT ON;  
    DECLARE @DECRYPTEDPASSWORD VARCHAR(100)

    OPEN SYMMETRIC KEY PASSWORDKEY DECRYPTION BY CERTIFICATE ASAPDBCertificate with password = 'asap012ASAP'

    SELECT @DECRYPTEDPASSWORD = CONVERT (VARCHAR , DECRYPTBYKEY([PASSWORD]))  
    FROM dbo.gb_admin_userinfo 
    WHERE UPPER(EMAIL) = UPPER(@useremail )

    CLOSE SYMMETRIC KEY PASSWORDKEY

    IF (@DECRYPTEDPASSWORD = @password)
    BEGIN
        SELECT *
        FROM dbo.gb_admin_userinfo 
        WHERE UPPER(EMAIL) = UPPER(@useremail)
    END
    ELSE
    BEGIN
        SELECT 1
    END
END

示例调用:

EXEC  [SP_ValidateUser] 'anvesh@adaequare.com','1223123'

如果密码正确,则返回1&如果密码错误,则为null。

实体框架:

using (var db = new ASAPEntities())
{
    string cmdText = string.Format("exec SP_ValidateUser @useremail, @password");
    SqlParameter parEmail = new SqlParameter("@useremail", email);
    SqlParameter parPassword = new SqlParameter("@password", password);

    var r = db.Database.SqlQuery<SP_ValidateUser_Result>(cmdText, parEmail, parPassword).ToList();

    var res = db.SP_ValidateUser(email, password).ToList();
}

using (var db = new ASAPEntities())
{
    ObjectParameter parIsValidUser = new ObjectParameter("isvaliduser", DbType.Boolean);
    db.sp_IsValidUser(email, password, parIsValidUser);
    var result = parIsValidUser.Value is DBNull ? false : Convert.ToBoolean(parIsValidUser.Value);
    return result;
}

最终结果始终显示为真。

如果您需要任何进一步的信息,请添加评论。

问题是存储过程在SQL Server中正确执行,但EF没有返回正确的值。

我还更新了edmx文件,检查了函数导入等。

根据评论更新:

什么是ASAPEntities?它是与设计师一起创建的DbContext吗?   - 是的,它是DBContext&amp;它是由设计师创建的。

为什么在问题中包含第二次使用?问题与此有关吗?如果没有,您应该从问题中删除它以隔离问题。 - 我尝试了两种方式,因此第二次。

什么是SP_ValidateUser_Result? - 这是通过SP返回的复杂类型。

您可以尝试使用bool吗?你似乎没有对r或res做任何事情;这对我很怀疑。另外,为什么你需要r和res;那只是在你尝试东西的时候测试的吗? - 这些是我试过的测试。

你说它没有正确返回值,但是你在哪里查看了值? - 我在我的SSMS中执行,看看我的SP是否合适。

0 个答案:

没有答案