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是否合适。