我有NHibernate和postgresql POINT数据类型的问题(虽然我认为这是所有那些尝试映射NHPEnate SqlTypes未涵盖的SQL TYPE的常见问题)。
我的Data.Point类有两个公共浮点数:xcoordinate和ycoordinate。
我的第一次尝试是尝试实现IUserType接口,但我很快发现问题出现在映射阶段:
MappingException未被用户代码处理:
无法确定类型:Data.PointUserType,Data.Point,用于列:NHibernate.Mapping.Column(coordinates)
我对NHibernate很新,但在我看来,如果数据库中的列是已知类型(float,int,varchar和所有“经典”类型之一),我只能创建一个新类型,但不是我需要的几何形状。
我设法通过映射到坐标[0]和坐标[1]将我的POINT映射到两个不同的属性。但这仅对SELECT和UPDATE查询有用,因为INSERT postgresql会抱怨“坐标”不可为空。
另外,我找不到NHibernate Spatial扩展的实际版本,而且我更倾向于控制我的POINT类型,因为我很少使用这种类型,因此我宁愿不加载整个NHibernate Spatial程序集(假设它们是积极开发的,否则我会远离它们。)
我最后的想法是,我需要搞乱NHibernate的SQL生成(因为插入SQL的某些部分将是'(a,b)':: point ,非常具体),也许这有点太麻烦了(也许不是,我愿意检查一下)。
我对NHibernate相当新,但我变得绝望了。 有人能指点我吗?
答案 0 :(得分:1)
我最近让nHibernate使用SQL Server 2008.看看如何看待这个问题:NHibernate.Spatial and Sql 2008 Geography type - How to configure
如果您包含映射文件,那么帮助会更容易。我想知道你是否正确注册了你的IUserType?它应该看起来像这样
<class name="WhereAmI">
<property name="Point">
<type name="MyProject.MyPointUserType, MyProject">
</type>
</property>
</class>
另请考虑查看适用于MS SQL Servier 2008的以下IUserType实现:NHibernate.Spatial.Type.GeometryType