Как мне остановить AutoMapper от двух идентичных операторов SELECT с помощью NHibernate? - PullRequest
1 голос
/ 18 сентября 2010

У меня есть сущность с именем Incident и DTO с именем IncidentDTO. На данный момент IncidentDTO выглядит просто так:

public class IncidentDTO : Incident
{
    // empty until I can get AutoMapper working correctly
}

Я пытаюсь получить список всех Incidents в базе данных и преобразовать их в DTO, используя этот код:

Mapper.CreateMap<Incident, IncidentDTO>();

using (var session = SessionFactory.OpenSession())
{
    var incidents = session.Linq<Incident>();
    var incidentDTOs = Mapper.Map(incidents, new List<IncidentDTO>());
}

Этот код работает нормально, за исключением случаев, когда я использую NHProf для просмотра генерируемых операторов SQL, я получаю это:

SELECT ... FROM [Incident] this_
SELECT ... FROM [Incident] this_

Два оператора SELECT абсолютно идентичны. Почему AutoMapper генерирует два идентичных оператора SELECT и как мне предотвратить это?

Ответы [ 2 ]

1 голос
/ 18 сентября 2010

Предположение: при перечислении IQueryable создается отдельный выбор для каждого элемента. Решите это с помощью перечисления IList.

var incidents = session.Linq<Incident>().ToList();

Я бы, вероятно, сделал это, чтобы предотвратить другую проблему.

int someReasonableNumber = 1000;
var incidents = session.Linq<Incident>().Take(someReasonableNumber).ToList();

Это всего лишь предположение, а не то, что я действительно знаю.

0 голосов
/ 18 сентября 2010

Я думаю, что ваша проблема связана с этой проблемой :

...