c# - NHibernate:为 Postgres 添加 DbTypes

标签 c# postgresql nhibernate

我正在尝试为自定义用户类型注册新的 DbType,它只允许我使用 asp.net DbType 来关联我创建的自定义用户类型。例如:

    /// <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。唯一的问题是,当您尝试进行模式更新时,它总是获取为任何给定 dbtype 注册的最后一个列类型。问题是,没有为数组或 blob 指定 .net 数据类型......所以我必须为它们使用对象。在这种情况下,当我像这样调用架构更新时,任何具有 dbtype 对象的自定义用户类型将始终是数据库中的整数数组:

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

是否有另一种方法让 NHibernate 知道如何将这些列映射到数据库?

提前致谢。

最佳答案

您需要specify the sql-type in the mapping :

<property name="Foo" type="String">
    <column name="foo" length="64" not-null="true" sql-type="text"/>
</property>

关于c# - NHibernate:为 Postgres 添加 DbTypes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26371570/

相关文章:

c# - XNA 4.0 中的自定义光标

postgresql - postgres 中带有 psql 的空行。我怎样才能删除它?

sql - 列出重复值的数量

sql - 从客户事件、SQL 中查找放弃的搜索

nhibernate - 如何将 Skip 和 Take 附加到 nHibernate IQueryOver

c# - SQL SERVER 删除大量行优化

c# - 如何从 C# 将 [switch] 参数传递给 PowerShell 脚本?

c# - 未设置对象引用 c#

c# - 阅读每行 2 多行文本框

linq - NHibernate Linq - 重复记录