.net NHibernate缓慢启动,有条件加载HBMs和;关联引用未映射类“;

.net NHibernate缓慢启动,有条件加载HBMs和;关联引用未映射类“;,.net,nhibernate,model,hbm,.net,Nhibernate,Model,Hbm,背景 我们有几个项目/应用程序运行在同一个模型上。它们都有自己独特的实体/表,但也共享一个特定的通用实体/表。 即应用程序A所需的实体将永远不会被应用程序B所需,公共表除外,反之亦然。现在,公共表与应用程序A的表以及应用程序B的表都有关系。 当加载大量HBM时,事情会变得相当缓慢,因此我们实现了一个系统,该系统只加载当前运行的应用程序所需的HBM 问题 在应用程序A中,当我们现在访问公共表/实体时,如下所示: session.Linq<CommonEntity> ().Where (

背景

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

问题

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

session.Linq<CommonEntity> ().Where (...);
session.Linq(),其中(…);
我们得到以下异常

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

我希望只有当我们通过公共实体的关系显式地访问应用程序B的表时,NHibernate才会中断,因此,它不会中断,因为我们从未从应用程序a中断。 但是,唉

问题

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


我们确实使用延迟加载。

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


如果仍然太慢,可以序列化配置。请参见

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

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

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


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

是的,我知道配置是一次性操作,但希望可以映射部分模型。但是,您的序列化提示就是我们问题的答案。我已经实现了序列化,初步测试表明SessionFactory现在只需原始时间的10%到20%即可构建。塔克斯!是的,我确实想到了。但是,我们可能会有大量插件应用程序在同一个DB上运行,共享一些表,当公共表上的DB模式发生更改时,更新所有单独的模型将成为维护的难题。此外,我们正在使用LLBLGen生成NHibernate实体和映射,由于不太熟悉,我不知道它是否支持生成多个集合。很可能。