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) зависят от типа данных...

Другие вопросы по тегам