代码之家  ›  专栏  ›  技术社区  ›  simendsjo

ValidateSchema提供OverflowException

  •  0
  • simendsjo  · 技术社区  · 14 年前

    我的表有几个int(11)和int(11)可为空的列。我的域对象具有相同的int和int?财产。

    当我运行ValidateSchema时,我得到一个异常,但没有很好的错误消息:

       at System.Convert.ToInt32(UInt64 value)
       at System.UInt64.System.IConvertible.ToInt32(IFormatProvider provider)
       at System.Convert.ToInt32(Object value)
       at NHibernate.Dialect.Schema.MySQLColumnMetadata..ctor(DataRow rs)
       at NHibernate.Dialect.Schema.MySQLTableMetadata.GetColumnMetadata(DataRow rs)
       at NHibernate.Dialect.Schema.AbstractTableMetadata.AddColumn(DataRow rs)
       at NHibernate.Dialect.Schema.AbstractTableMetadata.InitColumns(IDataBaseSchema meta)
       at NHibernate.Dialect.Schema.AbstractTableMetadata..ctor(DataRow rs, IDataBaseSchema meta, Boolean extras)
       at NHibernate.Dialect.Schema.MySQLTableMetadata..ctor(DataRow rs, IDataBaseSchema meta, Boolean extras)
       at NHibernate.Dialect.Schema.MySQLDataBaseSchema.GetTableMetadata(DataRow rs, Boolean extras)
       at NHibernate.Tool.hbm2ddl.DatabaseMetadata.GetTableMetadata(String name, String schema, String catalog, Boolean isQuoted)
       at NHibernate.Cfg.Configuration.ValidateSchema(Dialect dialect, DatabaseMetadata databaseMetadata)
       at NHibernate.Tool.hbm2ddl.SchemaValidator.Validate()
    

    这个方法看起来不像是用反射镜做了什么奇怪的事情:

    public MySQLColumnMetadata(DataRow rs) : base(rs)
    {
        base.Name = Convert.ToString(rs["COLUMN_NAME"]);
        object obj2 = rs["CHARACTER_MAXIMUM_LENGTH"];
        if (obj2 != DBNull.Value)
        {
            base.ColumnSize = Convert.ToInt32(obj2);
        }
        obj2 = rs["NUMERIC_PRECISION"];
        if (obj2 != DBNull.Value)
        {
            base.NumericalPrecision = Convert.ToInt32(obj2);
        }
        base.Nullable = Convert.ToString(rs["IS_NULLABLE"]);
        base.TypeName = Convert.ToString(rs["DATA_TYPE"]);
    }
    

    我还有几个约会时间和约会时间?在我的模型上。我知道mysql上的nhibernate在DateTime上有点奇怪。这可能是问题所在吗?

    1 回复  |  直到 14 年前
        1
  •  0
  •   simendsjo    14 年前

    我添加了nhibernate源代码,发现这是由于数据库中的一个长文本列造成的。似乎不支持mysql方言。

    编辑:

    以及 here's the fix 我过去常常回避这个问题。不知道这是我的验证问题的解决方案还是一个完整的解决方案。。。