Fluent NHibernate生成的列名别名太长

问题描述 投票:2回答:2

给出表列名称为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.

是否有任何方法可以控制所生成的列别名的长度?更改列名不是一个选项。

c# nhibernate fluent-nhibernate sybase
2个回答
3
投票

将方言归类并覆盖最大长度:

public class DialectOverride: *BaseDialect*
{
  public override int MaxAliasLength { get { return 30; } } 
}

然后在配置时指定方言:

new DatabaseConfiguration().Dialect<DialictOverride>()

2
投票

这实际上是NHibernate中的一个错误,在该错误中无法正确解释MaxAliasLength:https://nhibernate.jira.com/browse/NH-3899(已在NHibernate 4.1中修复)

解决方法是将要用来覆盖MaxAliasLength属性的方言子类化,并使其返回10-20范围内的值,这将为唯一的数字后缀留有足够的空间。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.