1

背景

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

问题

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

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

我们得到以下异常

NHibernate.MappingException:关联引用未映射的类:(应用程序 B 的实体)

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

问题

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

我们确实使用延迟加载。

4

2 回答 2

2

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

如果对您来说仍然太慢,可以将配置序列化。请参阅http://github.com/ayende/Effectus/blob/master/Effectus/Infrastructure/BootStrapper.cs

于 2010-09-13T13:15:19.437 回答
1

我不知道有什么方法可以延迟验证,但我不这么认为。

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

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

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

于 2010-09-16T06:33:16.450 回答