我需要使用nHibernate读取postgis几何列作为wkt。我知道我可以使用nHibernate空间,但在我的情况下这不是一个选项。
我看过这个帖子:在NHibernate (fluent)中映射隐藏属性的最佳方式,其中wkt存储在另一列中,他使用触发器来更新实际的几何图形。然而,项目业主不希望为此增加一个额外的栏目。
我也发现了这个主题:在Hibernate中透明地使用PostGIS列,但是没有人给出答案。
我相信我需要写一个自定义类型,但我真的需要有人给我指出正确的方向。我以前没有使用过Postgresql/postgis。
砰!
我通过使用nHibernates sql拦截器解决了这个问题。不是最健壮的解决方案,但这样我就可以为PostGis和Oracle拥有不同的拦截器。
我也调查了nHibernate。空间及其几何类型。但是我不想使用NetTopologySuite,因此我需要编写更多的代码。
以下是部分代码的示例:
public class PostGisGeometrySqlInterceptor : IInterceptor
{
...
/// <summary>
/// Modifies all the select statements with geometry so that
/// xxx.geometry -> ST_AsText(xxx.geometry)
/// </summary>
/// <param name="sql">The original sql string.</param>
/// <returns>The modified sql string.</returns>
/// <remarks>
/// All the geometry fields must be called 'geometry'.
/// Works only for one geometry in the sql string.
/// </remarks>
public virtual SqlString OnPrepareStatement(SqlString sql)
{
if (sql.StartsWithCaseInsensitive("SELECT") && sql.ToString().Contains("geometry"))
{
var indexOfGeometry = sql.IndexOfCaseInsensitive("geometry");
var indexOfSpace = sql.Substring(0, indexOfGeometry).LastIndexOfCaseInsensitive(" ") + 1;
var oldValue = sql.ToString(indexOfSpace, indexOfGeometry - indexOfSpace + "geometry".Length);
var newValue = string.Format("ST_AsText({0})", oldValue);
sql = sql.Replace(oldValue, newValue);
}
else if(...)
...
return sql;
}
如果不需要额外的列,可以创建一个视图,使用函数从原始表中提取数据,并在视图上创建instead of触发器来更新实际的表。
本文向大家介绍nhibernate 流利的NHibernate映射,包括了nhibernate 流利的NHibernate映射的使用技巧和注意事项,需要的朋友参考一下 示例 该Fluent NHibernate是一个库,以帮助您在使用C#代码,而不是XML映射的实体映射。Fluent NHibernate使用,fluent pattern并且它基于约定来创建映射,它为Visual Studio工具
问题内容: 我有下表: 我需要将其映射到对象: 在哪里,StronglyTypedData类似于: 默认情况下,XML列映射到XmlDocument属性,但是我希望XML序列化/反序列化到StronglyTypedData属性发生在映射时。 我需要怎么做才能做到这一点? 问题答案: 您需要编写一个负责转换的。 您可以从XmlDocType开始,它实际上是从原始XML转换为XmlDocument的那
问题内容: 有没有办法使用NHibernate将枚举持久化到数据库?那有一张代码表和枚举中每个值的名称。 我想保留没有实体的枚举,但仍然具有从所有其他引用实体到枚举的表的外键(枚举的int表示形式)。 问题答案: 你们为什么把这个复杂化呢?真的很简单。 映射如下所示: 该模型属性如下所示: 枚举看起来像这样: NHibernate将自动解决所有问题。为什么键入比您需要的更多???
hibernate 5.1 spatial的文档尚未发布(AFAIK),我正在尝试将带有JST几何字段的实体持久化到PostgreSQL 9.5 Postgis 2.2,但没有任何运气。 我也注意到没有组织。冬眠hibernate-core-5.1中的空间包。0.我尝试了以下注释的变体: 当列定义设置为“点”时,我得到“列”the_geom“是点的类型,但表达式是由茶的类型”。在Hibernate
问题内容: 如何使用NHibernate进行此查询 我正在使用NHibernate3。 我尝试使用新的Linq提供程序来完成此操作,但未成功。只要它产生上面确切的sql查询,我就不在乎它的执行方式。我希望编写一个强类型查询,如果可能的话,不要使用魔术字符串。 我是NHibernate的新手,所以这个问题可能很简单。 这是更多信息 我将Fluent NHibernate与AutoMappings结合
问题内容: 我在获取nHibernate.Search来创建索引时遇到了麻烦。 如果我使用nHibernate.dll和nHibernate.Search.dll的1.2.1.4,则可以正确创建索引,并且可以使用Luke(Lucene实用程序)对其进行检查。创建了一个segments文件以及一个Fragments文件等 但是,当我使用nHibernate.dll和nHibernate.Search