Сеанс Обслуживания RavenDB.Запрос, не возвращающий результаты


У меня есть экземпляр службы RavenDB, настроенный на localhost:8080, и я использую плагин OAuth для хранения простого пользовательского документа для аутентификации. Я использую guid для идентификатора и электронной почты пользователей в качестве имени. Следующий код функционирует должным образом для хранения пользователя

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 studio, я смогу увидеть пользователя и имя именно так, как я его ввожу (я даже скопировал и вставил его в текстовое поле).

Введите описание изображения здесь

Я пытался остановить и перезапустить службу, надеясь, что это решит проблему, но это не помогло.

Мне было интересно, может ли кто-то указать мне направление, как я мог бы отладить то, что здесь происходит. Полное хранилище кода можно найти здесь

Https://github.com/jamesamuir/MVC_Facebook_Auth

Если кто-то склонен скачать оно.

Заранее благодарю.

1 2

1 ответ:

Ну, я вижу много неправильных вещей в приведенном вами примере кода - например, несоответствие версий клиента и сервера. Кроме того, пакет проверки подлинности был функцией 1.0, которая была устаревшей в версии 2.0, которая является почти окончательной, поэтому вы пишете код, который в конечном итоге придется заменить.

Но чтобы ответить на ваш вопрос, конкретная причина, по которой вы не можете получить результаты от вашего запроса, заключается в том, что вы выбрали использовать ключ документа, начинающийся с "Raven/", который является соглашением для RavenDB системные документы - которые не индексируются.

Если вы удалите "ворон/" из вашего идентификатора, он будет работать.

Кроме того, вы не должны использовать .WaitForNonStaleResults() - это только для модульных тестов и опасно в производстве. Если вы действительно чувствуете, что вам нужно подождать, используйте .WaitForNonStaleResultsAsOfNow() - это безопаснее, потому что это обеспечивает отсечение.