RavenDB Service Session.Query没有返回结果

时间:2012-12-21 02:52:30

标签: session oauth ravendb

我在localhost:8080上设置了一个RavenDB服务实例,并使用OAuth插件存储一个简单的用户文档进行身份验证。我使用guid作为id和用户的电子邮件作为名称。以下代码正常运行以存储用户

public AccountUserDocument CreateUser(RegisterModel model)
{
    using (IDocumentSession session = DataDocumentStore.Instance.OpenSession())
    {
        Guid userId = Guid.NewGuid();

        session.Store(new AccountUserDocument
            {
                Name = model.Email,
                Id = String.Format("Raven/Users/{0}", userId),
                AllowedDatabases = new[] { "*" },

                Email = model.Email,
                FirstName = model.FirstName,
                LastName = model.LastName,
                FacebookId = 0,
                Expires = DateTime.Now.AddMonths(1),
                AccessToken = string.Empty

            }.SetPassword(model.Password));

        session.SaveChanges();

        return session.Load<AccountUserDocument>
                       (String.Format("Raven/Users/{0}", userId));
    }
}

并返回有效的用户对象。但是,当我打电话

return session.Query<AccountUserDocument>()
              .Customize(x => x.WaitForNonStaleResults())
              .Where(x => x.Name == email)
              .SingleOrDefault();

我一无所获。它已经在一周前工作了,但现在却没有。如果我打开RavenDB工作室,我可以看到用户和名称正是我输入它的方式(我甚至将其复制并粘贴到文本字段中)。

enter image description here

我已经尝试停止并重新启动服务,希望能够解决问题,但事实并非如此。

我想知道是否有人可以指出我如何调试这里发生的事情。完整的代码库可以在这里找到

https://github.com/jamesamuir/MVC_Facebook_Auth

如果有人愿意下载它。

提前致谢。

1 个答案:

答案 0 :(得分:1)

好吧,我发现您提供的代码示例存在很多问题 - 例如客户端和服务器版本不匹配。此外,身份验证包是一个1.0功能,已在2.0中弃用,这几乎是最终的,因此您正在编写最终必须替换的代码。

但是要回答你的问题,你无法从查询中得到结果的具体原因是你选择使用以“Raven /”开头的文档密钥,这是RavenDB系统文档的惯例 - 得到索引。

如果您从ID中删除“Raven /”,它将会有效。

此外,您不应该使用.WaitForNonStaleResults() - 这仅适用于单元测试,并且在生产中是危险的。如果您真的觉得需要等待,请使用.WaitForNonStaleResultsAsOfNow() - 这样更安全,因为它提供了截止。

相关问题