【发布时间】:2014-10-16 02:38:05
【问题描述】:
我正在尝试为自定义用户类型注册新的 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。唯一的问题是当您尝试进行模式更新时,它总是会获取为任何给定 dbtype 注册的最后一个列类型。问题是,没有为数组或 blob 指定 .net 数据类型......所以我必须为它们使用对象。在这种情况下,当我像这样调用模式更新时,任何具有对象 dbtype 的自定义用户类型将始终是数据库中的整数数组:
var update = new SchemaUpdate(configuration);
update.Execute(true, true);
还有其他方法可以让 NHibernate 知道如何将这些列映射到数据库吗?
提前致谢。
【问题讨论】:
标签: c# postgresql nhibernate