0

我有一个与其他对象有很多关联的对象。所有这些都是由 nHibernate 懒惰地获取的,这在几乎所有情况下都很好。

在一个特定的场景中,在这种情况下会导出大量记录,我想将 Fetchmode 设置为对所有关联都渴望。有没有办法做到这一点,而不必手动指定每个:

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

我想找到但无法找到的方法:

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

2 回答 2

2

您可以尝试使用 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
    }
}

我不确定这是否值得努力。

于 2009-12-23T09:37:32.447 回答
1

不,没有办法以一揽子方式做到这一点。

于 2009-12-23T08:18:44.023 回答