Search code examples
.netnhibernatemodelhbm

NHibernate slow startup, conditional loading of HBMs and "Association references unmapped class"


Background

We have several projects / applications running off the same model. They all have their own unique entities / tables, but also share 1 specific, common entity / table. I.e. Entities required by application A, will never be required by application B, except for the common table, and vice versa. Now the common table has relationships to application A's tables, as well as to application B's tables. Things get rather slow when loading large numbers of HBMs, so we implemented a system that only loads the HBMs required by the application that is currently running.

The problem

In application A, when we now access the common table / entity, like this:

session.Linq<CommonEntity> ().Where (...);

We get the following exception

NHibernate.MappingException: Association references unmapped class: (application B's entity)

I was hoping NHibernate would only break if we explicitly tried to access application B's tables via the relationships from the common entity, and that as a result, it wouldn't break because we never do that from application A. But alas.

Question

Is there a way to configure NHibernate to delay the validation of a relationship mapping until it is accessed?

We do use lazy loading.


Solution

  • Configuration is a one-time operation, and the configuration must be 100% consistent when you build the SessionFactory.

    If it's still too slow for you, the configuration can be serialized. See http://github.com/ayende/Effectus/blob/master/Effectus/Infrastructure/BootStrapper.cs