NHibernate - 不加载属性(单个查询)

时间:2014-07-22 21:21:05

标签: nhibernate fluent-nhibernate geometry lazy-loading

关于我的问题的一些背景:我正在运行NHibernate,并且我有一个包含特定空间参考中的几何的表,但是在Web服务器上主动使用它的系统正在使用不同的空间参考,所以我创建了一个事件监听器来自动在加载,更新和插入上来回进行投影。这总体上很有效。现在当我针对这个表创建一个查询时出现了问题,几何图形无关紧要,但是转换为自定义类型以及随后对所有结果的投影最终需要花费相当多的时间,所以我不想加载该属性。

我认为我有2个逻辑选项:
1.懒惰加载物业
2.创建一个单独的类,该类不映射该属性(但在其他方面相同)

我尝试了延迟加载解决方案,但据我所知,我没有事件监听器可以捕获延迟负载并允许我进行投影,因此所有几何结束在非洲。我看到这个问题的唯一解决方案是每次我想要实际使用该属性并手动加载和投影它,但这对我来说似乎很糟糕。

TLDR: NHibernate中是否有任何方法可以将属性设置为延迟加载(或根本不加载)仅用于特定查询,或者更好的方法是创建另一个类而不是在那一个中​​映射几何?我根本不想将几何图形加载到内存中,因此投影无法提供帮助。

1 个答案:

答案 0 :(得分:0)

经过一段时间的努力,我找到了一个我喜欢的解决方案。我回去处理延迟加载属性,但我转移到我在几何用户类型内部进行投影。现在无论是否加载,它都会被正确投影,并且更清晰地表明投影正在映射中发生。

以下是我的几何图谱映射示例:

Map(m => m.Shape, "SHAPE").CustomType<GeometryType<Wgs84WebMercator, Nad83FloridaGdlAlbers>>().LazyLoad();