无法使用linq从dbcontext中查找数据

时间:2015-09-15 13:49:26

标签: c# .net entity-framework linq

我正在尝试开发一个"密码重置"功能。为了实现这一点,我在用户请求重置密码并将其作为电子邮件发送时生成一个guid,其中包含指向密码重置页面的链接,该链接具有guid作为查询字符串。 我写的代码如下:

Request.QueryString[BusinessLayerConstants.resetPasswordQueryString]) ? Request.QueryString[BusinessLayerConstants.resetPasswordQueryString] : String.Empty;
    passwordCode = System.Web.HttpUtility.UrlDecode(passwordCode);

    using (DBEntities entities = new DBEntities())

    {

    User = entities.AspNetUsers.FirstOrDefault(u => u.PasswordReset == passwordCode);

    if (User != null)
    {
        //TODO
    }
}

问题是,linq总是返回null。如果我使用相同的guid在数据库中运行SQL命令,我就能看到数据。并且passwordCode变量也获得了正确的值。我甚至检查过passwordCode是否有一些隐藏的字符,因为它来自查询字符串;但它也没关系。

我也使用这个完全相同的逻辑进行激活。我传递一个guid作为查询字符串,为了激活,我能够使用以下代码查找数据:

AspNetUser user = entities.AspNetUsers.FirstOrDefault(u => u.ActivationCode == activationCode);

它不适用于密码,我也尝试过使用.Equals().Contains()而没有运气。

如果有人知道可能出现的问题,我将不胜感激。感谢。

编辑: PasswordReset只是我生成的一些GUID作为查询字符串传递。 当我这样做时,一切都很好: Running some sql

但是在代码中,我编写的代码返回null: enter image description here

1 个答案:

答案 0 :(得分:0)

请记住C#是区分大小写的,你应该这样做:

Request.QueryString[BusinessLayerConstants.resetPasswordQueryString]) ? Request.QueryString[BusinessLayerConstants.resetPasswordQueryString] : String.Empty;
    passwordCode = System.Web.HttpUtility.UrlDecode(passwordCode);

    using (DBEntities entities = new DBEntities())

    {

    User = entities.AspNetUsers.FirstOrDefault(u => u.PasswordReset.ToLower() == passwordCode.ToLower());

    if (User != null)
    {
        //TODO
    }
}