NHibernate: добавление DbTypes для Postgres

Я пытаюсь зарегистрировать новые DbTypes для пользовательских типов пользователей, и он позволяет мне использовать asp.net DbTypes только для связи пользовательских типов пользователей, которые я создал.. например:

    /// <summary>
/// An SQL dialect for PostgreSQL 8.2 and above.
/// </summary>
/// <remarks>
/// PostgreSQL 8.2 supports <c>DROP TABLE IF EXISTS tablename</c>
/// and <c>DROP SEQUENCE IF EXISTS sequencename</c> syntax.
/// See <see cref="PostgreSQLDialect" /> for more information.
/// </remarks>
public class PostgreSQL82Dialect : PostgreSQL81Dialect
{
    public PostgreSQL82Dialect()
    {
        RegisterColumnType(DbType.Guid, "uuid");
        RegisterColumnType(DbType.Object, "uuid[]");
        RegisterColumnType(DbType.Object, "integer[]");
        RegisterColumnType(DbType.Binary, "jsonb");
    }

    public override bool SupportsIfExistsBeforeTableName
    {
        get { return true; }
    }

    public override string GetDropSequenceString(string sequenceName)
    {
        return string.Concat("drop sequence if exists ", sequenceName);
    }
}

Я добавил uuid[], integer[] и jsonb. Единственная проблема заключается в том, что при попытке обновления схемы всегда регистрируется последний тип столбца, зарегистрированный для любого заданного типа db. Проблема в том, что для массивов или больших двоичных объектов не указан тип данных.net, поэтому я должен использовать для них объект. В этом случае любой пользовательский тип пользователя, который имеет dbtype объекта, всегда будет целочисленным массивом в базе данных, когда я вызываю обновление схемы следующим образом:

   var update = new SchemaUpdate(configuration);
   update.Execute(true, true);

Есть ли другой способ сообщить NHibernate, как сопоставить эти столбцы с базой данных?

Заранее спасибо.

1 ответ

Решение

Вам необходимо указать sql-тип в отображении:

<property name="Foo" type="String">
    <column name="foo" length="64" not-null="true" sql-type="text"/>
</property>
Другие вопросы по тегам