Я столкнулся с проблемой после обновления до последней версии Dapper из Nuget (v 1.7).
Он всегда возвращает первый член перечислений (т.е. не отображает карты).
Я использую MySQL в качестве базы данных.
CREATE TABLE `users_roles` (
`userId` INT(11) NOT NULL,
`roleId` INT(11) NOT NULL,
KEY `user_id` (`userId`),
KEY `role_id` (`roleId`)
);
INSERT INTO `users_roles` (`userId`, `roleId`) VALUES (1, 1);
INSERT INTO `users_roles` (`userId`, `roleId`) VALUES (2, 2);
public enum Role {
Anonymous = 0, Authenticate = 1, Administrator = 2
}
var role = Current.Db.Query<Role>(@"SELECT roleId as Role FROM users_roles
WHERE [email protected]", new { id = 2 }).FirstOrDefault();
Он дает ожидаемый результат в Dapper nuget v1.6. Это правильное поведение для новой версии (1.7)?
Update:
После нескольких тестов с несколькими консольными приложениями и свежими приложениями mvc3 я обнаружил, что поведение сопоставления перечислений 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 [email protected]", new { id = 2 }).FirstOrDefault();
результат пользователя .Role как-то возвращает ожидаемый результат