Ejemplo n.º 1
0
    public async Task ProjectionOnNonStoredFieldsInIndex()
    {
        var myEntityIndex = new MyEntityIndex();

        using var store = base.GetDocumentStore(new Options
        {
            ModifyDocumentStore = s => s.Conventions.FindProjectedPropertyNameForIndex =
                (indexedType, indexedName, path, prop) =>
            {
                if (indexedName == myEntityIndex.IndexName)
                {
                    return(path + prop);
                }

                return(DocumentConventions.DefaultFindPropertyNameForIndex(indexedType, indexedName, path, prop));
            }
        });

        var id    = "myEntity/1";
        var value = 100;

        var e = new MyEntity {
            Id = id, Name = "Test", Details = new MyEntity.EntityDetails {
                Description = "Test Description", Value = value,
            }
        };

        using (var s = store.OpenAsyncSession())
        {
            await new MyEntityIndex().ExecuteAsync(store);
            await s.StoreAsync(e);

            await s.SaveChangesAsync();
        }

        Indexes.WaitForIndexing(store);

        using (var s = store.OpenAsyncSession())
        {
            var r1 = await QueryRawCollection(s);

            Assert.Collection(r1, a => Assert.Equal(value, a.Details_Value));

            var r2 = await QueryUsingJavaScriptProjection(s);

            Assert.Collection(r2, a => Assert.Equal(value, a.Details_Value));

            var r3 = await QueryOnNonStoredFieldsInIndex(s);

            Assert.Collection(r3, a => Assert.Equal(value, a.Details_Value));
        }
    }