Свободная проблема Nhibernate (ClassMap) - PullRequest
3 голосов
/ 07 апреля 2009

У меня есть следующий 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 Ответ

3 голосов
/ 08 апреля 2009

Ну, я не использовал 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...