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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top