SubSonic: MaxLength von Table (überschreiten)
-
21-09-2019 - |
Frage
So verwenden wir SubSonic als unsere DAL / ORM für eines unserer Projekte. Alles ist reibungslos läuft (die Datenbank bereits vorhanden, so dass wir SubSonic verwenden oben drauf), aber gelegentlich werden wir in eine Ausnahme ausführen, die etwas sagt wie die ganze Zahl überschreitet die maximale Länge. In diesem Beispiel unseres MySql-Feld ist ein int (4) unterzeichnet. Welche, nach MySql Dokumentation wird eine Reihe der folgenden erlauben:
-2147483647 bis 2147483647
Nun meine Frage, wie wird MaxLength in SubSonic diktiert? Ist es die Anzahl der Ziffern? Weil das bedeutet, es wäre nur -9.999-9999 erlauben, richtig? Das scheint wie eine ziemlich große Diskrepanz, und ich hoffe, dass nicht der Fall ist, oder sonst werden wir eine Menge anderer Probleme haben.
Danke, -Steve
Lösung
Mit Reflektor, und einen Drilldown zu Active der Save-Funktion (welche Anrufe 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));
}
Flag auf true gesetzt ist, wenn die Variable null ist. Also, ja, es ist von der Anzahl der Ziffern abgehend (siehe: ToString () Länge.). Dies scheint keinen Sinn zu machen, da MySql nicht die Länge Eigenschaft des Datentypen verwenden, um die Anzahl der Stellen für ganzzahlige Werte basierend zu bestimmen.
Dies ist SubSonic 2.2.