因此,我们将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/