我知道这个问题可能会导致一个主观的答案,但我想从其他人那里得到一个意见。在NHibernate中映射隐藏属性的最佳方式(流利)
一些背景 目前,我有一个公用字符串WKT一个私人字符串属性映射到一个PostgreSQL(PostGIS的)数据库表中的几何列一类。 WKT被PostGIS用于使用触发器自动更新几何列。由于我不想在域模型中包含任何空间参考,因此所有查询均使用WKT字符串和自定义空间标准完成,该空间标准将WKT包装在空间PostGIS函数中,并查询专用几何特性列参考。所有这些按预期工作。
问题 因为我需要的列引用,我还需要物业在我的DomainModel,对NHibernate的映射到,所以我在想,最好的解决办法是什么,对NHibernate的,以从未选择这个性质。
我目前的解决方案看起来与功能NHibernate如下:
Map(Reveal.Member<LocationReference>("Geometry"), "geometry")
.Generated.Always()
.ReadOnly()
.LazyLoad();
这是卓有成效的,当我选择实体,我不会得到的财产,除非我手动加载它(这ISN”通过lambda扩展可能)。不幸的是,我仍然可以为该属性进行Criteria或HQL查询。
那么有没有什么办法可以让我做任何事情来阻止NHibernate能够做到曾经有过包括select中的列?或者,上述解决方案是在与Query<>
或QueryOver<>
一起选择时至少忽略列的唯一方法?
我不太了解,并您的域名实际使用此LocationReference私有财产?在您的域中使用它有什么用途? – Vadim 2011-05-27 21:30:32
嗯,我实际上只需要属性就可以让NHibernate在执行查询时意识到它。 NHibernate应该自动映射到正确的列别名,并且正如我写的那样,我创建了一个自定义空间标准,该标准使用该属性的字符串名称。 – Siewers 2011-05-28 03:59:12