如何在EF中比较区分大小写的字符串?

问题描述

| 使用EF的成员资格提供者
ValidateUser
非常简单
public override bool ValidateUser(string username,string password)
{
    // Validate User Credentials
    var r = db.ST_Users.FirstOrDefault(
                           x => x.Username.Equals(username) && 
                                x.Password.Equals(password));
    return r != null ? true : false;
}
但是无论我使用
balexandre
还是
BAleXanDre
,这都会返回
true
(查找并检索孔对象)。   如何启用EF在区分大小写的模式下进行比较? 我知道如何在不区分大小写的情况下进行比较(使用
StringComparison.CurrentCultureIgnoreCase
重载,但我只想相反)     

解决方法

        您不应该查询密码。您应该检索“ 6”对象并在本地进行密码比较,因为默认情况下,SQL Server会为您执行不区分大小写的比较(除非您更改数据库设置,这不应该轻描淡写)。
var r = db.ST_Users.SingleOrDefault(x => x.Username == username);

return r != null && r.Password == password;
此外,您似乎在数据库中存储了普通密码。根据应用程序的类型,这可能不是一个好主意。尝试用盐将它们散列。在Stackoverflow上可以找到很多很好的信息。例如,看看这个问题和这个网站。     ,        你有没有尝试过
x => x.Username == username && x.Password == password
而不是使用
Equals()
? 也许这篇文章可以进一步帮助您     ,        我面临着同样的问题。我试过了:
1. from p in entity.SecurityUsers where p.userName.Equals(userName) && p.password.Equals(password) select p
2. from p in entity.SecurityUsers where p.userName == userName && p.password == password select p
但是这两个都不起作用。然后我只选择了“ 11”。
var user = (from p in entity.SecurityUsers where p.userName == userName select p).first();
然后比较其密码:
return p != null && p.Password == password;