Swe*_*tie 2 .net c# asp.net c#-4.0 asp.net-mvc-3
我会问一个非常基本的问题,但是因为我遇到了这个问题而且我不知道为什么会发生这种情况.通常当我们比较两个字符串如s1 == s2时,它会与长度,字符,大小写等进行比较,但在linq中使用以下查询时,它与字符串的大小写不匹配.我的DB有Password123,但是当我输入password123时,它也会返回一条实际上错误的记录.我的查询是:
var row = DB.tbllogin.Where(m => m.Id == LoginId && m.Password == pwd.Trim()).FirstOrDefault();
它与案例不匹配.DB中的字段是nvarchar类型,pwd是字符串类型,我使用的是Entity Framework ORM.
问题是比较是在SQL中执行的 - 我怀疑如果你在SQL Studio中执行相同的查询,你会得到相同的结果.
一种解决方法是将数据库排序规则更改为区分大小写; 目前尚不清楚您是否可以直接在LINQ本身中执行此操作.(这是细节通过抽象泄漏的情况之一.)
但是,针对此特定情况的更好解决方案是不以明文形式存储您的密码.这是非常不安全的.您应该使用类似的东西存储哈希bcrypt.有关详细信息,请参阅Jeff Atwood关于该主题的博客文章.