因此,我们将SubSonic用作我们的其中一个项目的DAL / ORM。一切都运行顺利(数据库已经存在,因此我们在其之上使用了SubSonic),但是,有时我们会遇到一个异常,例如整数超出最大长度。在此示例中,我们的MySql字段是一个int(4)签名的。根据MySql文档,这将允许以下范围:

-2147483647至2147483647。

现在,我的问题是,SubSonic如何规定MaxLength?是位数吗?因为这意味着它只能允许-9999到9999,对吗?这似乎是一个很大的差异,我希望事实并非如此,否则我们将遇到很多其他问题。

谢谢,
-史蒂夫

最佳答案

使用Reflector,然后深入到ActiveRecord的Save函数(该函数调用ValidateColumnSettings):

 if ((!flag && (column.MaxLength > 0)) && ((column.DataType != DbType.Boolean) && (currentValue.ToString().Length > column.MaxLength)))
        {
            Utility.WriteTrace(string.Format("Max Length Exceeded {0} (can't exceed {1}); current value is set to {2}", column.ColumnName, column.MaxLength, currentValue.ToString().Length));
            this.errorList.Add(string.Format(this.LengthExceptionMessage, str, column.MaxLength));
        }


如果变量为null,则将flag设置为true。因此,是的,它超出了位数(请参阅:ToString()。Length)。这似乎没有任何意义,因为MySql不会使用数据类型的length属性来确定基于整数的值的位数。

这是SubSonic 2.2。

关于c# - SubSonic:TableColumn的MaxLength(超过),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2097694/

10-11 03:27