NHibernate игнорирует атрибут длины
После запуска SQL Profiler я понял, что NHibernate отображает строки в nvarchar(4000). Я исправил это, указав type=AnsiString и length=... в файле hbm. Теперь он генерирует операторы varchar(8000) и игнорирует длину. Как так?!
файл hbm:
<property name="EmailAddress" column="EMAIL_ADDRESS" type="AnsiString" length="120" />
поле базы данных:
[EMAIL_ADDRESS] [varchar](120) NULL,
ТИА
1 ответ
Решение
На самом деле в предыдущих версиях nhibernate проверка на длину была реализована и для создания запросов.
Но текущая реализация SqlDriver изменилась в прошлом году, подробности исправления см. На https://nhibernate.jira.com/browse/NH-3036.
Исправлена ошибка:
// Used from SqlServerCeDriver as well
public static void SetVariableLengthParameterSize(IDbDataParameter dbParam, SqlType sqlType)
{
SetDefaultParameterSize(dbParam, sqlType);
// no longer override the defaults using data from SqlType, since LIKE expressions needs larger columns
// https://nhibernate.jira.com/browse/NH-3036
//if (sqlType.LengthDefined && !IsText(dbParam, sqlType) && !IsBlob(dbParam, sqlType))
//{
// dbParam.Size = sqlType.Length;
//}
if (sqlType.PrecisionDefined)
{
dbParam.Precision = sqlType.Precision;
dbParam.Scale = sqlType.Scale;
}
}
Значения по умолчанию (4000/8000) зависят от типа данных...