MySQL에서 반환 된 부울 값을 설정할 때 Dapper가 잘못된 캐스트 예외를 throw합니다.

dapper mysql mysql.data

문제

나는이 수업을 가진다.

public class User
{
    public int UserId { get; set; }
    public string UserName { get; set; }
    public bool IsValidated { get; set; }
}

그리고 나는이 SQL을 dapper를 사용하여 채 웁니다.

var users = connection.Query<User>("SELECT userId, userName, TRUE `IsValidated` FROM user WHERE [...]").ToList();

이걸 실행할 때이 오류가 발생합니다.

열 2 구문 분석 오류 (IsValidated = 1 - Int64)

내가 dapper 코드를 통해 밟은 & sqldatareader 그 열은 int64 , 그래서 NET Mysql 커넥터 '는 tinyint MYSQL에 있어야합니다'생각하고있는 것 같습니다 int64 입니다.

나는 INT (INT, BIGINT, TINYINT, SMALLINT, MEDIUMINT)의 모든 버전에서 .NET 커넥터가 int64를 리턴했다는 버그 보고서 를 발견했다. 그러나 이것은 MySQL 5.0의 버그 였고 수정되었습니다. 5.5를 사용하고 있습니다. 나는 mysql.data 버전 6.4.3.0을 가지고있다.

나는이 문제를 BOOL 선언 된 IsValidated 컬럼을 가진 임시 테이블에 모두 선택하여이 문제를 "해결했다". 그러나 이것은 비참한 해결책이다.

인기 답변

나는 Drapper에 익숙하지 않지만 MySQL은 int (보통 tinyint)로 부울 값을 반환하므로 클래스를 다음과 같이 변경할 수 있습니다.

public class User  
{  
    public int UserId { get; set; }  
    public string UserName { get; set; }
    private bool _isValidated = false;
    public bool IsValidated
    { 
        get{ return _isValidated;}
        set{ _isValidated = Boolean.Parse(value); }
   }  
}  

또는 SQL에서 캐스트를 시도하십시오.

cast(TRUE `IsValidated` as bit)

나는 이것을 시도하지 않았지만 적어도 당신에게는 제안이 있습니다. 모두 제일 좋다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow