Получение данных из более чем 50 таблиц с использованием Linq-to-NhibernateC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Получение данных из более чем 50 таблиц с использованием Linq-to-Nhibernate

Сообщение Anonymous »

У меня есть веб-сервис, который обрабатывает более 50 таблиц базы данных (база данных сильно нормализована), чтобы создать ответ. Сервис возвращает все рейсы, измененные в пределах диапазона дат, указанного клиентом.

Из соображений производительности я хочу избежать отложенной загрузки и получить как можно большую часть графика перед сопоставлением с типом ответа.
Я разбил свой запрос на более мелкие части, используя Nhibernate Fetch + ToFuture для быстрой загрузки нужных мне данных:

Код: Выделить всё

var fetchQuery = Session.Query()
.Fetch(v => v.VoyageStatus)
.FetchMany(v => v.VoyageLocations)
.Where(v => voyageIds.Contains(v.VoyageID))
.ToFuture();

Session.Query()
.FetchMany(s => s.ShipCsos)
.Where(s => shipIds.Contains(s.ShipID))
.ToFuture();

Session.Query()
.Fetch(s => s.ShipFlagCode)
.ThenFetch(sf => sf.Country)
.Fetch(s => s.ShipType)
.Fetch(s => s.ShipStatus)
.Fetch(s => s.ShipSource)
.Fetch(s => s.ShipHullType)
.Fetch(s => s.ShipLengthType)
.Fetch(s => s.ShipBreadthType)
.Fetch(s => s.ShipSpeedType)
.Fetch(s => s.ShipPowerType)
.FetchMany(s => s.ShipAttributes)
.ThenFetch(sa => sa.ShipAttributeName)
.Where(s => shipIds.Contains(s.ShipID))
.ToFuture();

//[Lots of similar Session.Query...ToFuture() calls]

return fetchQuery.ToList();
Проблема

Я начинаю достигать предела параметров SQL Server, 2100, когда диапазон дат достигает определенного интервала. Я думал, что ограничение параметров применимо только к одному предложению IN, но, очевидно, оно применимо к запросу в целом; используя Futures, я получаю один SQL-запрос с одним оператором SELECT для каждого вызова ToFuture (каждый оператор SELECT содержит предложение IN среднего размера).

Есть ли обходной путь для этого этот? Например, есть ли способ отправлять меньшие группы фьючерсов, чтобы оставаться в пределах ограничения параметров и при этом увлажнять объекты?

Я пробовал выполнить fetchQuery.ToList () колл на полпути через фьючерс. Это позволяет избежать исключений из пределов параметров, но объекты не гидратируются должным образом в соответствии с Nhibernate Profiler (свойства загружаются отложенно).

Любые указатели будут высоко оценены!

Подробнее здесь: https://stackoverflow.com/questions/360 ... nhibernate
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»