2013-03-15 1 views
3

(int 값으로 열거, 말끔) 사용자 역할의 구현 유효하지 않습니다 그 문제). 나는 사용자를 가져올 때 이제지정한 캐스트 내가 (단순 첫 번째 컷)와 클래스가

은이 라인은 실패 (ELMAH에서)

toReturn = conn.Query<User>("SELECT TOP 1 * FROM dbo.UserProfile WHERE 1=1"); 

스택 추적 : 데이터베이스에서

System.Data.DataException: Error parsing column 2 (Role=1 - Int16) ---> System.InvalidCastException: Specified cast is not valid. 
    at Deserialize06df745b-4fad-4d55-aada-632ce72e3607(IDataReader) 
    --- End of inner exception stack trace --- 
    at Dapper.SqlMapper.ThrowDataException(Exception ex, Int32 index, IDataReader reader) in c:\Dev\Dapper\Dapper\SqlMapper.cs:line 2126 
    at Deserialize06df745b-4fad-4d55-aada-632ce72e3607(IDataReader) 
    at Dapper.SqlMapper.<QueryInternal>d__d`1.MoveNext() in c:\Dev\Dapper\Dapper\SqlMapper.cs:line 827 
    at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
    at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
    at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in c:\Dev\Dapper\Dapper\SqlMapper.cs:line 770 

Role의 열 유형이 smallint입니다 .

NuGet의 Dapper 1.12.1을 사용하고 있습니다.

답변

5

가. 대답은 데이터베이스와 클래스 정의를 일치시키는 것이 었습니다.

smallint (MigratorDotNet이 나를 위해 생성 한 것입니다)의 경우 short이 아닌 int에서 파생 된 enum이 필요했습니다. 모든 것이 지금 작동합니다.

아마도 유용한 Google 코드 문제 : https://code.google.com/p/dapper-dot-net/issues/detail?id=32

관련 문제