У меня в настоящее время проблема с производительностью с следующим запросом, написанным в NHibernate. Я пытаюсь преобразовать данные, которые я запросил в DTO. С этой сложной структурой я не могу использовать QueryOver для преобразования сущностей. С другой стороны, поставщик Linq настолько полезен, но требуется ~ 10 секунд для загрузки и преобразования ~ 6000 объектов с каждым 30 дочерними элементами. Он создает SQL-запрос с левым внешним соединением. Есть ли другие способы написать этот запрос с лучшим подходом?Ошибка производительности с запросом NHibernate
var Entities = session.Query<crmEntity>()
.Where(x => x.EntityType.ID == EntityType)
.Select(entity => new EntityDTO()
{
ID = entity.ID,
EntityType = entity.EntityType.ID,
InstanceID = entity.Instance.ID,
Values = entity.Values.Select(
value => new CustomFieldValueDTO()
{
ID = value.ID,
FieldID = value.Field.ID,
Value = value.Value
}).ToList<CustomFieldValueDTO>()
}).ToList();
Вы уверены, что вы жадный выбор «Ценностей»? Это не похоже на опубликованный код. – Andre
Да, он работает с нетерпением. HasMany (x => x.Values) .KeyColumn ("Entity") .Cascade.AllDeleteOrphan() .Fetch.Select() .BatchSize (1000); – iboware
Также, когда я добавляю Fetch (x => x.Values) до ".Select (..." Требуется ~ 20 секунд. – iboware