Dapper 확장 - 'System.Int32'형식의 개체를 'System.Int16'형식으로 변환 할 수 없습니다.

dapper dapper-extensions

문제

더 이상 확장 (SqlMapperExtensions.cs)을 사용하고 있습니다.

간단한 삽입 작업을 수행 할 때 :

db.Insert<Student>(student);

나는 예외를 얻는다 :

Object of type 'System.Int32' cannot be converted to type 'System.Int16'.

db의 Id 유형은 SmallInt입니다.
POCO의 ID 유형은 Short입니다.

Catch 블록에서 브레이크 포인트를 수행하면 데이터가 db에 지속적으로 저장되었음을 알 수 있습니다. 문제가 다시 돌아와 POCO로 생성 된 새 ID를 설정하려고 할 때 문제가있는 것처럼 보입니다.

POCO에서 ID 유형을 Int 로 변경하면 작동합니다.

이거 버그 야? 나는 무엇을 놓치고 있습니까?

인기 답변

이것은 버그 처럼 보입니다. SqlMapperExtensions 가 사용하고있는 실제 insert 문은 다음과 같습니다 (530 행 전후) :

var r = connection.Query("select @@IDENTITY id", transaction: transaction, commandTimeout: commandTimeout);
int id = (int)r.First().id; // (1)
if (keyProperties.Any())
        keyProperties.First().SetValue(entityToInsert, id, null); // (2)
return id;

ID가 int (위의 (1) 참조)가 될 것으로 예상됩니다. 그리고 int 값 (위의 주 (2) 참조)을 사용하여 엔티티에 속성을 설정하려고합니다. POCO의 identity 속성이 short 일 경우, 위의 예는 예외를 throw합니다.

편집하다
주석에서 언급했듯이 이제 Dapper.Contrib[Key] 특성을 지원합니다.



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