2

我在 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 工作室,我可以看到用户和名称正是我输入的方式(我什至将其复制并粘贴到文本字段中)。

在此处输入图像描述

我曾尝试停止并重新启动服务,希望能解决问题,但没有。

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

https://github.com/jamesamuir/MVC_Facebook_Auth

如果有人愿意下载它。

提前致谢。

4

1 回答 1

1

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

但要回答您的问题,您无法从查询中获得结果的具体原因是您选择使用以“Raven/”开头的文档键,这是 RavenDB 系统文档的约定 - 不会被索引.

如果您从您的 id 中删除“Raven/”,它将起作用。

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

于 2012-12-31T00:39:24.470 回答