我在从Nuget(版本1.7)升级到Dapper的最新版本后遇到了一个问题。
它总是返回第一个枚举成员(也就是说,它无法进行映射)。
我正在使用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();
用户角色的结果以某种方式返回了预期的输出