RavenDB - Получить идентификаторы корневого свойства в свойстве некорневого уровня - PullRequest
0 голосов
/ 10 января 2012

С RavenDB возможно ли получить идентификаторы свойства в другом свойстве?Например, если у Foo есть список объектов Bar, а каждый объект Bar имеет свойство SnuhId, могу ли я использовать Include, который получает идентификаторы каждого свойства Snuh?

Я пробовал запрос ниже, но получаюисключение RavenDB: индекс вне диапазона.В этом запросе ApplicationServer является корневым элементом и содержит список объектов ApplicationsWithOverrideGroup.Каждый из этих объектов имеет свойство ApplicationId.Это ApplicationId, который я хочу получить во включении.

IEnumerable<ApplicationServer> appServers = QueryAndCacheEtags(session =>
  session.Advanced.LuceneQuery<ApplicationServer>()
  .Include(x => x.CustomVariableGroupIds)
  // This is the line I'm trying to make work:
  .Include(x => (from item in x.ApplicationsWithOverrideGroup select item.ApplicationId).ToList())
  ).Cast<ApplicationServer>();

Любой из этих подходов кажется работающим.Необходимо тщательно протестировать.

.Include(x => x.ApplicationsWithOverrideGroup)

или

.Include(x => x.ApplicationsWithOverrideGroup[0].ApplicationId)

Если этот первый параметр действительно работает, то свойство, указанное в Include (), будет включать в себя свойства идентификатора.,Это верно?

Я не уверен, что оба они действительно работают, но они, кажется, работают.Если они оба работают, мне интересно, один из них лучше другого ...

Хорошо, это НЕ РАБОТАЕТ.NumberOfRequests увеличивается, что, как я предполагаю, означает, что количество обращений к БД увеличивается, а не только то, что в сеансе.

1 Ответ

0 голосов
/ 10 января 2012

Хорошо, ни одно из этих предложений не сработало в приведенном выше вопросе.Я думаю, что нужно сделать, чтобы включить идентификаторы вложенных свойств в корневой объект.

И это то, что я сделал, и я смог получить NumberOfRequests для объекта сеанса до одного.Любопытно, что мне пришлось изменить это:

// Not using this, at least for now, because it increased the NumberOfRequests on the session...
appServer.CustomVariableGroups = new ObservableCollection<CustomVariableGroup>(
QueryAndCacheEtags(session => session.Load<CustomVariableGroup>(appServer.CustomVariableGroupIds)).Cast<CustomVariableGroup>());

На это:

// ... however, this kept the NumberOfRequests to just one. Not sure why the difference.
appServer.CustomVariableGroups = new ObservableCollection<CustomVariableGroup>();
foreach (string groupId in appServer.CustomVariableGroupIds)
{                
  appServer.CustomVariableGroups.Add(QuerySingleResultAndCacheEtag(session => session.Load<CustomVariableGroup>(groupId)) as CustomVariableGroup);
}
...