有人知道如何将NHibernate中的字符串(通过.hbm映射)映射到Postgresql的“citext”类型吗?
我尝试像这样设置sql-type =“citext”:
<property name="UserName">
<column name="username" sql-type="citext" />
</property>
但是这不起作用 - 当通过此列查询数据库时,仍然会进行区分大小写的比较。
答案 0 :(得分:0)
经过一段时间的努力,我终于找到了如何做到这一点的方法。
我通过派生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;
}
}
}