我有以下XML(.hbm):
<property name="Geometry" column="the_geom">
<type name="NHibernate.Spatial.Type.GeometryType,NHibernate.Spatial">
<param name="subtype">MULTIPOLYGON</param>
<param name="srid">-1</param>
</type>
</property>
它使用的是Nhibernate Spatial类型...... 如何使用ClassMap(Fluent Nhibernate)映射该属性?
由于
答案 0 :(得分:3)
好吧,我没有使用过NHibernate Spatial,但是我浏览了代码,看起来GeometryType
继承自IUserType,所以你应该可以将它与.CustomTypeIs<>
一起使用
例如:
Map(x => x.Geometry, "the_geom").CustomTypeIs<GeometryType>();
除非它自动发生,否则可能无法获得param
元素。我不确定一个真正好的方法,但你总是可以像这样添加XML更改:
Map(x => x.Geometry, "the_geom").AddAlteration(p => p.AddElement("type")
.WithAtt("name", "NHibernate.Spatial.Type.GeometryType,NHibernate.Spatial")
.AddElement("param")
.WithAtt("name", "subtype")
.WithText("MULTIPOLYGON")
.ParentNode
.AddElement("param")
.WithAtt("name", "srid")
.WithText("-1")
);
请注意,要获得WithText
功能,您必须像XmlElement
那样添加扩展名(WithAtt和AddElement是FluentNHibernate.Mapping命名空间中的扩展名):
public static class XmlExtensions
{
public static XmlElement WithText(this XmlElement element, string text)
{
element.InnerText = text;
return element;
}
}