我知道这个问题可能导致主观回答,但我想得到其他人的意见。
一些背景 目前,我有一个类,它将私有字符串属性映射到PostgreSQL(PostGIS)数据库表中的几何列以及WKT的公共字符串。 PostGIS使用WKT使用触发器自动更新几何列。由于我不想在我的域模型中包含任何空间参考,所有查询都是使用WKT字符串和自定义空间标准完成的,该标准将WKT包装在空间PostGIS函数中并查询私有几何属性列引用。所有这些都按预期工作。
问题 由于我需要列引用,我还需要我的domainmodel中的属性,以便NHibernate映射到,所以我想知道,最好的解决方案是什么,对于NHibernate来说从不选择这个属性。
我目前的解决方案如下所示:Fluent NHibernate:
Map(Reveal.Member<LocationReference>("Geometry"), "geometry")
.Generated.Always()
.ReadOnly()
.LazyLoad();
这就是诀窍,当我选择实体时,我不会得到属性,除非我手动加载它(这是不可能通过lambda扩展)。不幸的是,我仍然可以对该属性进行Criteria或HQL查询。
那么有什么方法让我做任何阻止NHibernate能够永远包含选择列的内容吗?或者上述解决方案是在使用Query<>
或QueryOver<>
进行选择时至少忽略该列的唯一方法?
答案 0 :(得分:0)
好吧,我最终删除了映射属性,因为即使它很懒,NHibernate有时也会加载它。我所做的实际上是一个黑客攻击。我需要来自同一个类的属性的别名,所以我使用了另一个属性的映射并将SqlString
拆分为“.
”,以获得正确的别名。
所有这一切对我来说都很有意义,“解决方法”并不好,但我没有看到任何其他方式。 NHibernate需要知道它正在处理什么属性,分配适当的别名。由于我没有映射属性,因此无法知道我正在寻找什么别名。
我想我做了很多黑客攻击,只是为了避免引用NHibernate.Spatial ......