Dapper를 변경하여 데이터베이스 Null 값을 double으로 매핑합니다 .NaN

.net ado.net dapper sqlite

문제

내 SQLite 데이터베이스에 nullable 이중 열이 있습니다.

더블 타입의 컬럼에 대해 데이터베이스에서 읽을 때 null을 "double.NaN"으로 변환하고 싶습니다.

현재 dapper는 null 값을 0으로 설정합니다. 원하지 않습니다.

내 옵션은 무엇입니까?

  1. Dapper 소스 코드를 수정하십시오.
  2. Dapper를 사용할 수 없으며 구식 ADO.NET 코드를 작성해야합니까?
  3. cnn.Query 메서드를 호출하는 방식을 변경하여 매핑이 이루어지는 방식을 수정하십시오.

첫 번째 옵션은 옵션 1이지만 Dapper를 수정하는 데 도움이 필요합니다.

수락 된 답변

개인적으로, 나는 이것을 반대 할 것이다; null은 NaN과 완전히 똑같지 않습니다. 이 작업을 실제로 수행하려면 GetTypeDeserializer 를 살펴 GetTypeDeserializer 합니다. 이를 수행하는 코드는 ILGenerator 사용하여 동적으로 생성되며 상당히 복잡합니다. 선을 찾는 경우 :

public double? Value {get;set;}

DbNull 이 감지되면 코드가 분기됩니다. 현재 스택에있는 두 값 (값 및 대상)을 팝하고 바닥에 놓은 다음 계속 수행합니다. 특별한 경우로 float / double 을 확인하고 변환을 적용한 다음 NaN을 멤버에게 할당해야합니다.

나는 이것이 간단하게 유효하지 않다는 나의 주장을 반복한다. 훨씬 간단한 옵션은 다음과 같습니다.

public double? Value {get;set;}

제로 변경이 필요하며 현재 작동 할 것입니다. 정말로 정말로 원한다면 null이 아닌 double로 취급 될 것입니다.

public double? Value {get;set;}

이제는 기본값이 NaN 으로 설정되고 값이 있으면 올바르게 구체화됩니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.