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

bal*_*dre 2 linq asp.net-membership entity-framework-4

ValidateUser使用EF 的会员提供者非常简单

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;
}
Run Code Online (Sandbox Code Playgroud)

true无论我是否使用balexandre或,它都会返回(查找并检索孔对象)BAleXanDre.

如何在区分大小写模式下启用EF进行比较?

我知道如何比较不区分大小写(使用StringComparison.CurrentCultureIgnoreCase重载,但我只是想要相反)

Ste*_*ven 8

您不应该查询密码.您应该检索该User对象并在本地进行密码比较,因为默认情况下SQL服务器会对您进行不区分大小写的比较(除非您更改数据库设置,这不是您应该轻视的事情).

var r = db.ST_Users.SingleOrDefault(x => x.Username == username);

return r != null && r.Password == password;
Run Code Online (Sandbox Code Playgroud)

此外,您似乎在数据库中存储普通密码.根据应用程序的类型,这可能不是一个好主意.尝试用盐对它们进行哈希处理.在Stackoverflow上可以找到很多关于它的好信息.例如,看看这个问题这个网站.

  • +1代表答案和建议.向Sony,ECI以及最近发布新闻的所有其他公司学习 - 不要存储纯文本密码! (2认同)