Прежде всего, я только начинаю работать с RavenDB, поэтому, пожалуйста, будьте терпеливы, когда я объясню проблему. Я пытаюсь создать свою первую карту, карту, уменьшить, преобразовать индекс. Да, я знаю, что пытаюсь сделать много, но у меня большая часть работает.
Итак, сначала я делаю это в моем global.asax, чтобы убедиться, что все свойства "ID" используются в качестве идентификатора в документах.
_documentStore.Conventions.FindIdentityProperty = p => p.Name == "ID";
ОК, теперь давайте посмотрим на индекс.
public class ProblemListViewIndex : AbstractMultiMapIndexCreationTask<ProblemListView>
{
public ProblemListViewIndex()
{
AddMap<Problem>(problems => from problem in problems
select new
{
ID = problem.ID,
SolutionCount = 0,
});
AddMap<Solution>(solutions => from solution in solutions
select new
{
ID = solution.ProblemID,
SolutionCount = 1,
});
Reduce = results => from result in results
group result by result.ID
into g
select new
{
ID = g.Key,
SolutionCount = g.Sum(x => x.SolutionCount),
};
Indexes.Add(x => x.ID, FieldIndexing.Analyzed);
TransformResults = (database, results) => from result in results
let problem = database.Load<Problem>("problems/" + result.ID.ToString())
let user = database.Load<User>("users/" + problem.PostedByID.ToString())
select new
{
ID = result.ID,
PostedByID = problem.PostedByID,
PostedByName = user.DisplayName,
SolutionCount = result.SolutionCount,
};
}
}
Так что все выглядит хорошо, и когда я тестирую индекс на веб-сайте RavenDB, я получаю смешанные результаты. У меня есть двойные прогнозы. У меня есть два прогноза, которые я ожидаю, но две их копии. Вот как выглядит «ID» на результатах проецирования.
- проблемы / 194
- проблемы / 195
- 194
- 195
Я запутался, но потом я вернулся и посмотрел на "карты". Мой код переведен на что-то другое в созданном индексе. Вот как выглядит первая карта при ее создании.
docs.Problems
.Select(problem => new {ID = problem.__document_id, SolutionCount = 0})
Даже будучи новичком в RavenDB, я вижу проблему. Он использует поле «__document_id», когда я хочу использовать поле «ID». Я изменяю карту, а затем сохраняю индекс в следующем.
docs.Problems
.Select(problem => new {ID = problem.ID, SolutionCount = 0})
Как только я это сделаю, моя проекция будет выглядеть именно так, как я ожидал и как я хочу.
Мой вопрос заключается в том, что мне нужно сделать в моем коде, чтобы индекс создавался с использованием "ID" вместо "__document_id"?