有人知道如何将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/