Nuget (v 1.7) から最新バージョンの Dapper にアップグレードした後、問題が発生しました。
常に最初の enums メンバーを返します (つまり、マップに失敗します)。
データベースとして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 userId=@id", new { id = 2 }).FirstOrDefault();
Dapper nuget v1.6 で期待される出力が得られます。これは新しいバージョン (1.7) の正しい動作ですか?
アップデート:
いくつかのコンソール アプリケーションと新しい mvc3 アプリケーションでいくつかのテストを行った後、列挙型を直接マップすると、Dapper 列挙型マッピングの動作に一貫性がないことがわかりました。
ただし、列挙型をクラスのプロパティとしてマッピングすると、どういうわけか一貫して正しいマップが返されます
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 の結果は、どういうわけか期待される出力を返します