Fluent NHibernate生成的列名别名太长

时间:2016-08-19 18:26:39

标签: c# nhibernate fluent-nhibernate sybase

给定表格列名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.

有没有办法控制生成的列别名的长度?无法更改列名称。

2 个答案:

答案 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范围内的某些内容,这将为唯一的数字后缀留出足够的空间。