有人知道如何将NHibernate中的字符串(via.hbm mapping)映射到Postgresql的“citext”类型吗?
我试着这样设置sql type=“citext”:

<property name="UserName">
    <column name="username" sql-type="citext" />
</property>

但这不起作用-当使用此列查询数据库时,仍然进行区分大小写的比较。

最佳答案

经过一段时间的挣扎,我终于找到了一种方法。
我通过从NHibernate.Driver.NpgsqlDriver派生并重写InitializeParameter方法创建了自己的Postgresql驱动程序。然后我通过hibernate.cfg.xml文件配置这个驱动程序。
我正在使用Npgsql包访问Postgresql,所以我的想法是在需要时用Citext覆盖NpgsqlDbType:

public class CitextPostgreSqlDriver : NpgsqlDriver
{
    protected override void InitializeParameter(DbParameter dbParam, string name, SqlType sqlType)
    {
        base.InitializeParameter(dbParam, name, sqlType);

        var dbType = sqlType?.DbType;
        var npgsqlParam = dbParam as Npgsql.NpgsqlParameter;
        if (npgsqlParam != null && (dbType == System.Data.DbType.String || dbType == System.Data.DbType.AnsiString))
        {
            npgsqlParam.ResetDbType();
            npgsqlParam.NpgsqlDbType = NpgsqlTypes.NpgsqlDbType.Citext;
        }
    }
}

关于.net - PostgreSQL中的NHibernate映射citext,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48264678/

10-12 03:19