给定表格列名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.
有没有办法控制生成的列别名的长度?无法更改列名称。
答案 0 :(得分:2)
对方言进行子类化并覆盖最大长度:
public class DialectOverride: *BaseDialect*
{
public override int MaxAliasLength { get { return 30; } }
}
然后在配置时指定方言:
new DatabaseConfiguration().Dialect<DialictOverride>()
答案 1 :(得分:1)
这实际上是NHibernate中的一个错误,它无法正确帐户MaxAliasLength: https://nhibernate.jira.com/browse/NH-3899
解决方法是对您正在使用的方言进行子类化以覆盖MaxAliasLength属性,并让它返回10-20范围内的某些内容,这将为唯一的数字后缀留出足够的空间。