Проблема при получении результатов из индекса во встроенной RavenDB - PullRequest
3 голосов
/ 27 сентября 2011

У меня есть индекс, который отлично работает, когда я запрашиваю его, используя клиентский API .Net с серверным RavenDb.

Однако, если я изменю RavenDb на внедренный тип, я не смогу запросить индекс напрямую, если сначала не запросю документ, который индекс использует.

Например, если у меня есть следующие объекты документа, которые находятся как отдельные коллекции в RavenDb:

private class TestParentDocument
        {
            public string Id { get { return GetType().Name + "/" + AggregateRootId; } }
            public Guid AggregateRootId { get; set; }
            public string Name { get; set; }
            public string Description { get; set; }
        }

private class TestChildProductFlagDocument
        {
            public string TestParentDocumentId { get; set; }
            public short ProductFlagTypeId { get; set; }
        }

Тогда у меня есть следующий объект, который представляет выходной документ, на который отображается индекс:

private class TestJoinIndexOutput
        {
            public string TestParentDocumentId { get; set; }
            public string Name { get; set; }
            public short ProductFlagTypeId { get; set; }
        }

Вот определение индекса:

private class TestJoinIndex : AbstractIndexCreationTask<TestChildProductFlagDocument, TestJoinIndexOutput>
        {
            public TestJoinIndex()
            {
                Map = docs => from doc in docs
                              select new
                              {
                                  TestParentDocumentId = doc.TestParentDocumentId,
                                  ProductFlagTypeId = doc.ProductFlagTypeId
                              };

                TransformResults = (database, results) =>
                    from result in results
                    let parentDoc = database.Load<TestParentDocument>(result.TestParentDocumentId)
                    select new
                    {
                        TestParentDocumentId = result.TestParentDocumentId,
                        ProductFlagTypeId = result.ProductFlagTypeId, 
                        Name = parentDoc.Name
                    };
            }

Мой код для вызова индекса выглядит так:

var theJoinIndexes = ravenSession.Query<TestJoinIndexOutput, TestJoinIndex>().ToList();

Это возвращается почти сразу и завершается ошибкой, если я не сделаю следующее:

var theParentDocuments = ravenSession.Query<TestParentDocument>().ToList();
var theJoinIndexes = ravenSession.Query<TestJoinIndexOutput, TestJoinIndex>().ToList();

Мое встроенное определение Ravendb выглядит так:

docStore = new EmbeddableDocumentStore
                 {
                    UseEmbeddedHttpServer = false,
                    RunInMemory = true

                };
                docStore.Configuration.Port = 7777;
                docStore.Initialize();

                IndexCreation.CreateIndexes(typeof(TestJoinIndex).Assembly, docstore);

1 Ответ

2 голосов
/ 27 сентября 2011

Вы не ждете завершения индексации, позвоните WaitForNonStaleResultsAsOfNow

...