NHibernate缓慢启动,HBM的条件加载和“关联引用未映射类”

时间:2010-09-13 06:03:05

标签: .net nhibernate model hbm

背景

我们有几个项目/应用程序在同一个模型上运行。它们都有自己独特的实体/表,但也共享1个特定的公共实体/表。 即除了公用表之外,应用程序B永远不会要求应用程序A所需的实体,反之亦然。现在公共表与应用程序A的表以及应用程序B的表有关系。 加载大量HBM时,事情变得相当缓慢,因此我们实现了一个只加载当前正在运行的应用程序所需的HBM的系统。

问题

在应用程序A中,当我们现在访问公共表/实体时,如下所示:

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

我们得到以下异常

  

NHibernate.MappingException:   关联引用未映射的类:   (申请B的实体)

我希望NHibernate只会在我们明确尝试通过公共实体的关系访问应用程序B的表时才会中断,结果,它不会中断,因为我们永远不会从应用程序A那样做。 但是唉。

问题

有没有办法配置NHibernate来延迟关系映射的验证,直到它被访问?

我们确实使用延迟加载。

2 个答案:

答案 0 :(得分:2)

配置是一次性操作,构建SessionFactory时配置必须 100%一致。

如果它仍然太慢,可以序列化配置。见http://github.com/ayende/Effectus/blob/master/Effectus/Infrastructure/BootStrapper.cs

答案 1 :(得分:1)

我不知道延迟验证的方法,但我不这么认为。

然而,也许还有另一种选择。您可以尝试为每个应用程序使用一组单独的映射文件。每个集合仅包含该应用程序和公用表所需的实体。

公用表的映射文件不得包含与属于其他应用程序的表创建关系的列。

因此,每个应用程序都有自己的一致实体集,只会忽略未映射的列。