Реализация нового типа NHibernate для типа данных POINT postgresql (или любой COLUMN непримитивного аналогичного типа nhibernate) - PullRequest
3 голосов
/ 01 октября 2010

У меня проблема с NHibernate и типом данных postgresql POINT (хотя я считаю, что это общая проблема для всех тех, кто пытается отобразить SQL TYPE, который не покрывается NHibernate SqlTypes).

MyКласс Data.Point имеет два открытых объекта: xcoordinate и ycoordinate.

Моя первая попытка была попытка реализовать интерфейс IUserType, но вскоре я обнаружил, что проблема возникает раньше, на этапе отображения:

MappingException не было обработано кодом пользователя:
Невозможно определить тип для: Data.PointUserType, Data.Point, для столбцов: NHibernate.Mapping.Column (координаты)

IЯ очень новичок в NHibernate, но мне кажется, что я могу создать новый тип, только если столбец в базе данных имеет известный тип (один из типов float, int, varchar и все «классические», но не геометрическийте, которые мне нужны).

Мне удалось сопоставить мой POINT с двумя различными свойствами, сопоставив координаты [0] и координаты [1].Но это полезно только для запросов SELECT и UPDATE, поскольку для INSERT postgresql будет жаловаться на то, что «координаты» не могут быть обнуляемыми.

Кроме того, я не могу найти актуальную версию расширений NHibernate Spatial, и я быскорее, у меня есть контроль над моим типом POINT, так как я буду использовать этот тип очень редко, и поэтому я бы предпочел не загружать все сборки NHibernate Spatial (предположим, что они активно разрабатываются, иначе я все равно буду держаться подальше от них).

Мои последние мысли о том, что мне нужно возиться с SQL Generation NHibernate (поскольку некоторая часть SQL для вставки будет '(a, b)' :: point , что-то очень специфическое) и, может быть, это слишком хлопотно (может быть, нет, я бы хотел это проверить).

Я довольно новичок в NHibernate, но я впадаю в отчаяние.Кто-нибудь может указать мне куда-нибудь?

1 Ответ

1 голос
/ 28 октября 2010

Недавно я получил nHibernate, работающий с SQL Server 2008. Чтобы увидеть, как увидеть этот вопрос: Тип географии NHibernate.Spatial и Sql 2008 - Как настроить

Было бы легче помочь, если бы вы включили файл сопоставления. Мне интересно, правильно ли вы зарегистрировали свой IUserType? Это должно выглядеть примерно так

<class name="WhereAmI">
    <property name="Point">
        <type name="MyProject.MyPointUserType, MyProject">
        </type>
    </property>
</class>

Также рассмотрите следующую реализацию IUserType, которая работает для MS SQL Servier 2008: NHibernate.Spatial.Type.GeometryType

...