Есть ли способ использовать AutoMapper для выражения проекции mongo c # при использовании aggregate ()? - PullRequest
0 голосов
/ 21 февраля 2019

Я стараюсь избегать ручного сопоставления моих моделей с моделями представления при использовании агрегации и проекции драйвера mongo c # (v2.7.2).

Вместо ручного сопоставления проекции

var projection = Builders<Model>.Projection.Expression(x => new ViewModel { 
   A = x.A, 
   B = x.B
   // ...more properties
});

я хочу использовать AutoMapper, чтобы сделать отображение

var projection = Builders<Model>.Projection.Expression(x => _mapper.Map<ViewModel>(x));

И на самом деле, это работает, когда я просто использую его для операции find (), подобной этой

var result = mongoCollection
   .Find(Builders<Model>.Filter.Empty)
   .Project(projection)
   .ToList();

Но когда я использую ту же проекцию для aggregate ()

var result = mongoCollection
   .Aggregate()
   .Project(projection)
   .ToList();

, создается исключение ArgumentOutOfRangeException

Произошло исключение: CLR / System.ArgumentOutOfRangeException Возникло исключение: 'System.ArgumentOutOfRangeException 'в System.Private.CoreLib.dll:' Индекс был вне диапазона.Должен быть неотрицательным и меньше размера коллекции. '

Прежде всего я хотел бы знать, почему сопоставление с AutoMapper работает для find (), а не для aggregate ()?

А также, если возможно, как-то использовать AutoMapper в этом сценарии, или если есть какой-то другой способ сопоставления с целевым классом без явной десериализации клиентской стороны результата?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...