NHibernate 忽略长度属性

2024-05-11

运行 SQL Profiler 后,我意识到 NHibernate 正在将字符串映射到nvarchar(4000)。我通过指定修复了它type=AnsiString and length=...在 hbm 文件中。现在正在生成varchar(8000)语句,并且忽略了长度。怎么会?

.hbm 文件:

<property name="EmailAddress" column="EMAIL_ADDRESS" type="AnsiString" length="120" />

数据库字段:

[EMAIL_ADDRESS] [varchar](120) NULL,

实际上,在 nhibernate 的早期版本中,还为查询创建实现了长度检查。

但是,SqlDriver 的当前实现去年发生了变化, 看https://nhibernate.jira.com/browse/NH-3036 https://nhibernate.jira.com/browse/NH-3036有关修复的详细信息。

Bugfix:

    // 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),具体取决于数据类型......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NHibernate 忽略长度属性 的相关文章

随机推荐