2010-01-19 3 views
1

그래서 우리 프로젝트의 DAL/ORM으로 SubSonic을 사용하고 있습니다. 모든 것이 순조롭게 진행되었습니다 (데이터베이스가 이미 존재하므로 SubSonic을 사용했기 때문에) 때때로 정수와 같은 것이 최대 길이를 초과한다는 예외가 발생합니다. 이 예제에서 MySql 필드는 int (4)로 서명되었습니다. 어떤, MySQL의 문서에 따라 수 있도록 다음의 범위 :SubSonic : TableColumn의 MaxLength (초과)

-2147483647 이제

2147483647, 최대 길이가 음속에 지시하는 방법을 내 질문에,? 그것은 자릿수입니까? 그것이 -9999에서 9999까지만 허용한다는 것을 의미하기 때문에? 그것은 다소 큰 불일치처럼 보입니다. 나는 그렇지 않길 바랄 것입니다. 그렇지 않으면 우리는 다른 문제들을 가지고있을 것입니다.

감사합니다, 스티브

+0

음, int (4)가 -2147483647에서 2147483647이면 4는 자릿수가 아닌 바이트 수를 나타냅니다. –

+0

참조 http://stackoverflow.com/questions/947406/subsonic-sqlite-float-datatype-cant-save-xxx-exceeds-the-maximum-length –

+0

추가 정보 : 저장할 수 없습니다. -field name- 최대 길이 인 4 – StephenPAdams

답변

0
반사판을 사용하여

, 및 (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 인 경우 true로 설정됩니다. 그래서, 네, 자릿수를 벗어날 것입니다 (참조 : ToString(). Length). 이것은 MySql이 데이터 유형의 길이 속성을 사용하여 정수 기반 값의 자릿수를 결정하지 않기 때문에 의미가없는 것처럼 보입니다.

이것은 SubSonic 2.2입니다.

+0

궁금한 점이있는 경우 ValidateWhenSaving 속성을 해제하여이 유효성 검사를 비활성화 할 수 있습니다 (false로 설정).). RecordBase의 생성자에서 기본적으로 활성화됩니다. 이것은 우리의 문제를 해결합니다. SubSonic에 대한 설정을 통해 이것이 생성 될 수 있다면 좋을 것입니다. 그래서 우리가 적합하다고 생각하는대로 활성화/비활성화 할 수 있습니다. – StephenPAdams