2010-12-04 2 views
1

2 개의 MySQL 데이터베이스가 있습니다. 하나는 기본 데이터베이스이고 다른 하나는 지리적 위치 데이터에 사용됩니다. SubSonic을 통해 생성 된 파일로 SubSonic을 멋지게 연출하기 위해 다른 데이터베이스의 Geolocation 데이터에 매핑하는 뷰를 만들었습니다. 모든 테이블과 Geolocation 데이터는 기술적으로 하나의 데이터베이스에 저장됩니다.SubSonic : MySql, Float 및 Single -> Decimal issues

지금, 내가 겪고있는 문제는 다음과 같습니다. Geolocation 테이블에는 두 개의 필드 (위도, 경도)가 모두 부동입니다. 내 테스트 프로젝트에서이 예외가

return new Select() 
      .From(ZipDatum.Schema) 
      .Where(ZipDatum.Columns.Zipcode).IsEqualTo(zipCode) 
      .ExecuteSingle<ZipDatum>(); 

: 내가 데이터를 얻을 수 있도록 표준 음속 문을 실행하면

은 'TestCanGetZipData은'실패 : System.ArgumentException : 유형의 객체 'System.Single' 'System.Decimal'형식으로 변환 할 수 없습니다.

SubSonic은 10 진수로 부동 소수점을 닮은 것처럼 보입니다. 그러나이 예외는 나를 위해 루프를 던지고있다. 이 문제를 해결할 수있는 방법은 없나요? FWIW, 다른 모든 200+ 테이블에서 우리는 그러한 필드가 필요한 필드에 10 진수를 사용합니다. 그러나 이것은 제 3 자 데이터베이스 테이블이기 때문에 float를 사용하고 있으며 이로 인해 문제가 발생합니다.

누구나이 상황에 처해 있습니까?

답변

1

한 가지 해결책은 ExecuteTypedList 메서드를 사용하는 것입니다.

public class ZipDatumHelperClass 
{ 
    public int Id {get;set;} 
    public string ZipCode {get;set;} 
    public single Latitude {get;set;} 
    public single Longitude {get;set;} 
} 
  • List<ZipCodeHelperClass> result = new Select() 
        .From(ZipDatum.Schema) 
        .Where(ZipDatum.Columns.Zipcode).IsEqualTo(zipCode) 
        .ExecuteTypedList<ZipDatumHelperClass>(); 
    
  • 가 일치 시키려고하기 때문에 ExecuteTypedList 방법은 매우 일반적인 접근 방식으로 쿼리를 다시 작성

    :

    1. 당신은 DTO 클래스를 만들어야합니다 DataReader에서 클래스의 속성에 이르는 열 이

      당신의 재산 B
      는 그냥 테스트 실행을 할 수 정확히 DataReader를

      에 의해 retured 시스템 유형과 일치하고 당신이하지 않는 때까지 결과를 수정해야 민감한 사례이기 때문에 그것은 매우 구체적이다 모든 오류.

      또 다른 해결책은 뷰의 mysql 유형에 대해 단일 시스템 유형을 생성하도록 SubSonic 소스를 수정하는 것입니다.

      public override DbType GetDbType(string mySqlType) { } 
      

      GET

      https://github.com/subsonic/SubSonic-2.0/blob/master/SubSonic/DataProviders/MySqlDataProvider.cs은 (소수점은 소수점, 부동, newdecimal, 숫자, 더블, 실제 생성됩니다) 당신은 DbType.Single 하나 여기에 잘못 알아낼 반환해야 mysqltype에서 DbType과의 대신. 참고로

      public static string GetSystemType(DbType dbType) { } 
      

      https://github.com/subsonic/SubSonic-2.0/blob/master/SubSonic/Utility.cs

      : 얻을 지정된 DbType과의 System.Type입니다. 그걸 수정해서는 안됩니다.