NHibernate忽略长度属性

时间:2013-11-21 02:42:29

标签: nhibernate nhibernate-mapping

运行SQL事件探查器之后,我意识到NHibernate将字符串映射到nvarchar(4000)。我通过在hbm文件中指定type = AnsiString和length = ...来修复它。它现在生成varchar(8000)语句,它忽略了长度。怎么来的?!

hbm文件:

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

数据库字段:

[EMAIL_ADDRESS] [varchar](120) NULL,

TIA

1 个答案:

答案 0 :(得分:2)

实际上在以前版本的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),具体取决于数据类型......

相关问题