Как установить режим Fetchmode для всех ассоциаций nHibernate ICriteria за один раз? - PullRequest
0 голосов
/ 23 декабря 2009

У меня есть объект, который имеет много ассоциаций с другими объектами. Все они лениво выбираются nHibernate, что хорошо почти во всех случаях.

В конкретном сценарии, в данном случае при экспорте большого количества записей, я хочу, чтобы режим Fetchmode включал все ассоциации. Есть ли способ сделать это, не указывая вручную каждый из них:

ICriteria crit = CreateCriteria().
  .SetFetchMode("Address", FetchMode.Eager)
  .SetFetchMode("ContactPerson", FetchMode.Eager);

Метод, который я хотел бы найти, но не смог:

// This doesn't work.
ICriteria crit = CreateCriteria().SetFetchMode(FetchMode.Eager);

Ответы [ 2 ]

2 голосов
/ 23 декабря 2009

Вы можете попробовать использовать метаданные NHibernate.

ISessionFactory sessionFactory;

Type type = typeof(MyEntity);
IClassMetadata meta = sessionFactory.GetClassMetadata(type);
foreach (string mappedPropertyName in meta.PropertyNames)
{
    IType propertyType = meta.GetPropertyType(mappedPropertyName);
    if (propertyType.IsAssociationType)
    {
      // initialize property
      // recursively go through the properties of the associated entity
    }

    if (propertyType.IsCollectionType)
    {
      // initialize collection
      // if it is a collection of entities, 
      // recursively go through the properties of the associated entity

      // Use NHibernateUtil.Initialize
    }
}

Я не уверен, стоит ли это усилий.

1 голос
/ 23 декабря 2009

Нет, нет способа сделать это в общем виде.

...