Сеанс Обслуживания 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 ответ:
Ну, я вижу много неправильных вещей в приведенном вами примере кода - например, несоответствие версий клиента и сервера. Кроме того, пакет проверки подлинности был функцией 1.0, которая была устаревшей в версии 2.0, которая является почти окончательной, поэтому вы пишете код, который в конечном итоге придется заменить.
Но чтобы ответить на ваш вопрос, конкретная причина, по которой вы не можете получить результаты от вашего запроса, заключается в том, что вы выбрали использовать ключ документа, начинающийся с "Raven/", который является соглашением для RavenDB системные документы - которые не индексируются.
Если вы удалите "ворон/" из вашего идентификатора, он будет работать.
Кроме того, вы не должны использовать
.WaitForNonStaleResults()
- это только для модульных тестов и опасно в производстве. Если вы действительно чувствуете, что вам нужно подождать, используйте.WaitForNonStaleResultsAsOfNow()
- это безопаснее, потому что это обеспечивает отсечение.