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 Metadata を使用してみることができます。

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 に答える