给出表列名称为ColumnNameIsVeryVeryLong
。
FluentNhibernate如此生成SQL ...
SELECT tablename0_.ColumnNameIsVeryVeryLong as ColumnNameIsVeryVeryLong2743_0_
FROM ...etc.
问题是基础Sybase数据库仅支持最大30个字节的标识符,因此,生成的列别名ColumnNameIsVeryVeryLong2743_0_
产生以下错误。
Sybase.Data.AseClient.AseException : The identifier that starts with 'ColumnNameIsVeryVeryLong2743_0_' is too long. Maximum length is 30.
是否有任何方法可以控制所生成的列别名的长度?更改列名不是一个选项。
将方言归类并覆盖最大长度:
public class DialectOverride: *BaseDialect*
{
public override int MaxAliasLength { get { return 30; } }
}
然后在配置时指定方言:
new DatabaseConfiguration().Dialect<DialictOverride>()
这实际上是NHibernate中的一个错误,在该错误中无法正确解释MaxAliasLength:https://nhibernate.jira.com/browse/NH-3899(已在NHibernate 4.1中修复)
解决方法是将要用来覆盖MaxAliasLength属性的方言子类化,并使其返回10-20范围内的值,这将为唯一的数字后缀留有足够的空间。