NHibernate: получение нескольких сущностей с подмножеством дочерней коллекции?

2

Мои классы выглядят примерно так (я включаю только соответствующие свойства):

public class Order 
{
   public virtual Customer Customer { get; set; }
   public virtual IEnumerable<OrderLine> OrderLines { get; set; }
}

public class OrderLine 
{
   public virtual string Product { get; set; } // Simplified
}

Теперь я хочу создать отдельный критерий, который выбирает все заказы для данного клиента и в то же время извлекает только первые 10 OrderLines для каждого заказа. Первая часть проста:

Customer someCustomerObject = ...;
var criteria = DetachedCriteria.For<Order>().Add(Restrictions.Eq("Customer", someCustomerObject);

Но как я могу приказать NHibernate с нетерпением получить первые 10 строк заказа для каждого заказа, полученного по вышеуказанным критериям?

Я пробовал использовать фильтр на следующем примере (взятый из документации Nhibernate):

session.CreateFilter( lazyCollection, "").SetFirstResult(0).SetMaxResults(10).List();

Но когда я даю Order.OrderLines методу CreateFilter, он сначала извлекает все порядковые строки, а затем извлекает 10 первых строк порядка, чего я не хочу. Я также попытался объединить это с вызовом NHibernateUtil.Initialize безрезультатно.

Как создать отдельный критерий для этой проблемы? Или, если это не совсем возможно, как мне получить для каждого заказа только 10 первых результатов, не получая всю коллекцию?

  • 0
    Что произойдет, если вы вместо этого вызовете SetMaxResults по «критериям»?
Теги:
nhibernate
detachedcriteria

1 ответ

0
Лучший ответ

Вы можете установить для свойства batch-size значение 10 в файле сопоставления NHibernate для класса Order. Таким образом, он с нетерпением загружает первые 10 элементов коллекции и ленивы загружает остальные элементы. Я собирал коллекцию следующим образом:

<set name="OrderLines" table="OrderToOrderLine" batch-size="10">
    <key column="OrderId"/>
    <one-to-many class="OrderLine"/>
</set>

Дополнительная информация, читайте дальше: NHibernate Mapping - Коллекции

Ещё вопросы

Сообщество Overcoder
Наверх
Меню