У меня есть запрос nhibernate 3.2, который возвращает первые 500 элементов вмешательства (в исходном запросе есть фильтр)
var (from interv in Session.Query<Intervention>()
.Fetch(rep => rep.ReponsePointVerification)
orderby interv.DateModification
select interv)
.Take(500)
.ToList();
Затем я повторяю все значения и использую значение ReponsePointVerification.
// a (very) simplified example
foreach (var intervention in listeInterventions)
{
foreach (var reponse in intervention.ReponsePointVerification)
{
}
listeInterventionsws.Add(interventionws);
}
Этот запрос оптимизирован, но он не работает должным образом, потому что метод Take будет занимать 500 строк, а при наличии значения ReponsePointVerification у меня не будет 500 элементов Intervention.
Так что если яхочу заставить его работать, у меня есть 2 метода:
- удалить Take (500) и взять только первые 500 вмешательств (тяжелые при увеличении базы данных)
- Удалить выборку, но еслиУ меня будет 500 + 1 запрос.
Есть ли у nhibernate метод для обработки этого случая?
С уважением
Редактировать
Спасибо, Диего, это сработало.
Ну, я забыл упомянуть, что я использовал отображение по коду в nh 3.2
Размер пакета с отображением по коду можно настроить следующим образом:
Bag(x => x.ReponsePointVerification, map =>
{
map.Key( k => k.Column( "IdIntervention" ) );
map.BatchSize(50);
}, rm => rm.OneToMany());
ср.http://puredotnetcoder.blogspot.com/2011/07/mapping-conventions-with-mapping-by.html