Я прочитал пост в блоге Айенде о функции мультикарты RavenDB и пытался реализовать его. Я не могу заставить его работать. То, что у меня есть, в основном совпадает с примером в сообщении в блоге:
class RootDocument {
public string Id { get; set; }
public string Foo { get; set; }
public string Bar { get; set; }
}
public class ChildDocument {
public string Id { get; set; }
public string RootId { get; set; }
public int Value { get; set; }
}
class RootsByIdIndex: AbstractMultiMapIndexCreationTask<RootsByIdIndex.Result> {
public class Result {
public string Id { get; set; }
public string Foo { get; set; }
public string Bar { get; set; }
public int Value { get; set; }
}
public RootsByIdIndex() {
AddMap<ChildDocument>(children => from child in children
select new {
Id = child.RootId,
Foo = (string)null,
Bar = (string)null,
Value = child.Value
});
AddMap<RootDocument>(roots => from root in roots
select new {
Id = root.Id,
Foo = root.Foo,
Bar = root.Bar,
Value = 0
});
Reduce = results => from result in results
group result by result.Id into g
select new {
Id = g.Key,
Foo = g.Select(x => x.Foo).Where(x => x != null).First(),
Bar = g.Select(x => x.Bar).Where(x => x != null).First(),
Value = g.Sum(x => x.Value)
};
}
}
Запросы по индексу всегда дают мне значение 0 для атрибута Value. Небольшое изменение индекса приводит к тому, что карта ChildDocument никогда не получает никаких документов.
Должно ли это работать в текущей стабильной сборке RavenDB (1.0.573)? Или я делаю это неправильно?