背景
我们有几个项目/应用程序在同一个模型上运行。它们都有自己独特的实体/表,但也共享1个特定的公共实体/表。 即除了公用表之外,应用程序B永远不会要求应用程序A所需的实体,反之亦然。现在公共表与应用程序A的表以及应用程序B的表有关系。 加载大量HBM时,事情变得相当缓慢,因此我们实现了一个只加载当前正在运行的应用程序所需的HBM的系统。
问题
在应用程序A中,当我们现在访问公共表/实体时,如下所示:
session.Linq<CommonEntity> ().Where (...);
我们得到以下异常
NHibernate.MappingException: 关联引用未映射的类: (申请B的实体)
我希望NHibernate只会在我们明确尝试通过公共实体的关系访问应用程序B的表时才会中断,结果,它不会中断,因为我们永远不会从应用程序A那样做。 但是唉。
问题
有没有办法配置NHibernate来延迟关系映射的验证,直到它被访问?
我们确实使用延迟加载。
答案 0 :(得分:2)
配置是一次性操作,构建SessionFactory时配置必须 100%一致。
如果它仍然太慢,可以序列化配置。见http://github.com/ayende/Effectus/blob/master/Effectus/Infrastructure/BootStrapper.cs
答案 1 :(得分:1)
我不知道延迟验证的方法,但我不这么认为。
然而,也许还有另一种选择。您可以尝试为每个应用程序使用一组单独的映射文件。每个集合仅包含该应用程序和公用表所需的实体。
公用表的映射文件不得包含与属于其他应用程序的表创建关系的列。
因此,每个应用程序都有自己的一致实体集,只会忽略未映射的列。