왜 dapper는 모든 숫자 열을 Int64로 반환합니까?

.net c# dapper

문제

다음과 같은 쿼리가 있습니다.

SELECT
  [Person].[Id] AS [Person_Id],
  [Person].[Name] AS [Person_Name],
  [Address].[Id] AS [Address_Id],
  [Address].[Number] AS [Address_Number],
  [Address].[Street] AS [Address_Street],        
FROM [Person]
LEFT JOIN [Address] ON [Person].[addressId] = [Address].[Id]

어느 SQLite 메모리 내 DB를 쿼리하는 데 사용됩니다 :

var rows = _database.Query(query);

그러나 Int32 값을 읽으려고하면 InvalidCastException 합니다.

foreach (IDictionary<string, object> row in rows)
{
    var someId = (int)row["Person_Id"];
    var someNumber = (int)row["Address_Number"];
}

내가 그렇게 dapper 것을 사용하는 이유는 사이드 프로젝트로서 나는 dapper 위에 값을 POCO 에 맵핑하기 위해 몇 가지 기능을 구현하고있다. (예 : rainbow , dapper.extensions 와 같은 유사한 프로젝트를 알고있다.

그래서 라인을 따라 뭔가 :

var rowVal = row[fieldName];
propInfo.SetValue(obj, rowVal, null);    

다시, 리플렉션 호출과 관련된 성능 비용을 무시하십시오.

위의 예제에서 POCO 의 속성 유형은 int32 문제로 인해 obj 값을 할당 할 수 없습니다.

어떤 도움이나 아이디어라도 대단히 감사하겠습니다.

수락 된 답변

Dapper가 아니라 SQLite입니다. 데이터 유형 참조 SQLite 버전 3 (실제로 v3을 사용한다고 가정) :

예를 들어, INTEGER 스토리지 클래스에는 길이가 다른 6 개의 정수 데이터 유형이 포함됩니다. 이것은 디스크에 차이를 만듭니다. INTEGER 값이 디스크에서 읽어지고 메모리로 처리 되 자마자 가장 일반적인 데이터 유형 (8 바이트 부호있는 정수)으로 변환 됩니다. 따라서 대부분의 경우 "스토리지 클래스"는 "데이터 유형"과 구분할 수 없으며이 두 용어는 서로 교환하여 사용할 수 있습니다.



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