流利的Nhibernate问题(ClassMap)

时间:2009-04-06 20:21:40

标签: c# nhibernate fluent-nhibernate

我有以下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)映射该属性?

由于

1 个答案:

答案 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;
    }
}