Reputation: 2820
I have an object that has many assocations to other objects. All of these are fetched lazily by nHibernate, which is good in almost all cases.
In a particular scenario, in this case an export of a lot of records, I want to set the Fetchmode to eager on all associations. Is there a way to do this, without having to manually specify each one:
ICriteria crit = CreateCriteria().
.SetFetchMode("Address", FetchMode.Eager)
.SetFetchMode("ContactPerson", FetchMode.Eager);
The method I would like to find, but haven't been able to:
// This doesn't work.
ICriteria crit = CreateCriteria().SetFetchMode(FetchMode.Eager);
Upvotes: 0
Views: 340
Reputation: 64628
You could try to use the 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
}
}
I'm not sure if it is worth the effort.
Upvotes: 2