在NHibernate(fluent)中映射隐藏属性的最佳方法

在NHibernate(fluent)中映射隐藏属性的最佳方法,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我知道这个问题可能导致主观的回答,但我想从其他人那里得到一个意见 一些背景 目前,我有一个类,该类将私有字符串属性与WKT的公共字符串一起映射到PostgreSQL(PostGIS)数据库表中的几何体列。PostGIS使用WKT使用触发器自动更新几何体列。由于我不想在域模型中包含任何空间引用,因此所有查询都是使用WKT字符串和自定义空间条件完成的,该条件将WKT包装在spatial PostGIS函数中,并查询private geometry属性列引用。所有这些都如预期的那样起作用 问题 因为我

我知道这个问题可能导致主观的回答,但我想从其他人那里得到一个意见

一些背景 目前,我有一个类,该类将私有字符串属性与WKT的公共字符串一起映射到PostgreSQL(PostGIS)数据库表中的几何体列。PostGIS使用WKT使用触发器自动更新几何体列。由于我不想在域模型中包含任何空间引用,因此所有查询都是使用WKT字符串和自定义空间条件完成的,该条件将WKT包装在spatial PostGIS函数中,并查询private geometry属性列引用。所有这些都如预期的那样起作用

问题 因为我需要列引用,我还需要domainmodel中的属性,以便NHibernate映射到,所以我想知道,对于NHibernate来说,最好的解决方案是什么,使其永远不会选择此属性

使用Fluent NHibernate,我当前的解决方案如下所示:

Map(Reveal.Member<LocationReference>("Geometry"), "geometry")
    .Generated.Always()
    .ReadOnly()
    .LazyLoad();
Map(显示成员(“几何体”),“几何体”)
.Generated.Always()
.ReadOnly()
.LazyLoad();
这就做到了,当我选择实体时,我不会得到属性,除非我手动加载它(这在lambda扩展中是不可能的)。不幸的是,我仍然能够对属性执行条件或HQL查询


那么,有没有什么方法可以阻止NHibernate在select中包含该列呢?或者上述解决方案是在使用
Query
QueryOver
进行选择时至少忽略列的唯一方法吗?

好吧,我最终删除了映射属性,因为即使它是惰性的,NHibernate有时也会加载它。我所做的其实有点不对劲。我需要来自同一类的属性的别名,因此我使用了来自另一个属性的映射,并在“
”上拆分
SqlString
”,以获得正确的别名

所有这些对我来说都很有意义,而且“变通办法”也不好,但我看不到任何其他方法。NHibernate需要知道它处理的是什么属性,以分配适当的别名。因为我没有映射属性,所以它无法知道我要查找的别名


我想我正在进行大量的黑客攻击,只是为了避免引用NHibernate.Spatial…

我不太明白,你的域名是否真的使用了这个LocationReference私有财产?在您的域中使用它的用例是什么?实际上,我只需要该属性在执行查询时让NHibernate知道它。NHibernate应该自动映射到正确的列别名,正如我所写的,我已经创建了一个自定义的空间条件,它通过属性的字符串名来使用属性。