Pregunta

Por lo tanto, estamos utilizando Subsónico como nuestro DAL/ORM para uno de nuestros proyectos.Todo ha ido bien (la base de datos ya existía, así que hemos utilizado Subsónico en la parte superior), sin embargo, en ocasiones veremos en una excepción que dice algo así como el entero es superior a la longitud máxima.En este ejemplo, nuestro MySql campo es un int(4) firmado.Que, de acuerdo a la documentación de MySql permitirá una amplia gama de los siguientes:

-2147483647 a 2147483647.

Ahora, mi pregunta, ¿cómo es MaxLength dictada en Subsónico?Es el número de dígitos?Porque eso significa que sólo permitiría -9999 a 9999, ¿correcto?Que parece una enorme discrepancia, y tengo la esperanza de que ese no es el caso, o de lo contrario vamos a tener un montón de otros problemas.

Gracias, -Steve

¿Fue útil?

Solución

El uso de reflectores y de la perforación hacia abajo para ActiveRecord la función Guardar (que llama a 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));
        }

indicador se establece en true si la variable es null.Así que, sí, van de la número de dígitos (vea:ToString().De longitud).Esto no parece tener ningún sentido, ya que MySql no utilizar la propiedad length del tipo de datos para determinar el número de dígitos para un entero basado en valores.

Este es Subsónico 2.2.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top