지정된 캐스트가 유효하지 않음 (int 값이있는 열거 형, Dapper)

dapper

문제

나는 사용자 역할을 (간단한, 첫 번째로) 구현 한 클래스를 가지고있다 :

class User { 
  public Role Role { get; set; }
  // ...
  public User() { this.Role = Role.Normal; }
  public void Save() { Membership.CreateUser(...) } // System.Web.Security.Membership
} 

enum Role : int {
  Invalid = 0,
  Normal = 1,
  SuperUser = 4096
}

역할을 추가하기 전에 모든 것이 잘 작동했습니다 (중요하다면).

이제 사용자를 가져 오려고하면이 줄이 실패합니다.

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

스택 추적 (ELMAH에서) :

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을 사용하고 있습니다.

수락 된 답변

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

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

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



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