dapper nuget 1.7 enums 매핑

c# dapper enums mysql

문제

Nuget의 Dapper 최신 버전 (v 1.7)으로 업그레이드 한 후 문제가 발생했습니다.

항상 첫 번째 열거 형 멤버를 반환합니다 (즉, 매핑에 실패 함).

데이터베이스로 MySQL을 사용하고 있습니다.

public class User
{
   public int Id { get; set; }
   public Role Role { get; set; }
}

var user = Current.Db.Query<User>(@"SELECT roleId as Role, userId as Id 
    FROM users_roles
    WHERE userId=@id", new { id = 2 }).FirstOrDefault();

Dapper nuget v1.6에서 예상되는 출력을 제공합니다. 새로운 버전 (1.7)에 대한 올바른 동작입니까?

최신 정보:

몇 가지 콘솔 응용 프로그램과 새로운 mvc3 응용 프로그램을 사용하여 일부 테스트를 수행 한 후에는 enum 유형을 직접 매핑 할 때 Dapper enum 매핑의 동작이 일관성이없는 것으로 나타났습니다.

그러나 클래스의 속성으로 열거 형을 매핑하면 어떻게 든 일관되게 올바른지도를 반환합니다.

public class User
{
   public int Id { get; set; }
   public Role Role { get; set; }
}

var user = Current.Db.Query<User>(@"SELECT roleId as Role, userId as Id 
    FROM users_roles
    WHERE userId=@id", new { id = 2 }).FirstOrDefault();

user.Role의 결과는 어떻게 든 예상 출력을 반환합니다.

인기 답변

버그가 해결 될 때까지 내 해결 방법은 여분의 조건으로 GetDeserializer 메서드를 수정하는 것입니다.

|| IsEnum

다음과 같이 enum에 struct deserializer를 사용합니다.

        private static Func<IDataReader, object> GetDeserializer(Type type, IDataReader reader, int startBound, int length, bool returnNullIfFirstMissing)
        {
...
            if (!(typeMap.ContainsKey(type) || type.IsEnum /* workaround! */ || type.FullName == LinqBinary))
            {
                return GetTypeDeserializer(type, reader, startBound, length, returnNullIfFirstMissing);
            }
            return GetStructDeserializer(type, startBound);

        }



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