public OperationResult<int?> Add(AddUserRequest model)
        {
            using (var conn = this.OpenConnection())
            {
                string sql = @"
IF EXISTS(SELECT 1 FROM [User] WHERE UserName=@UserName)
BEGIN
    SELECT CONVERT(BIT, 1)
END
ELSE
BEGIN
    SELECT CONVERT(BIT, 0)
END
";
                var b = conn.ExecuteScalar<bool>(sql, new
                {
                    UserName = model.UserName
                });

                if (b)
                {
                    return OperationResult<int?>.ErrorResult("用户名已存在");
                }

                string password = Utility.MD5(model.Password);

                sql = @"
INSERT INTO [User] ( UserName, Password, Nickname, Email, CreateDate )
VALUES ( @UserName, @Password, @Nickname, @Email, GETDATE() );

SELECT @@IDENTITY;
";
                var para = new
                {
                    Email = model.Email,
                    UserName = model.UserName,
                    Password = password,
                    Nickname = model.Nickname
                };


                var id = conn.ExecuteScalar<int>(sql, para);

                return OperationResult<int?>.SuccessResult(id);
            }
        }
        public OperationResult Edit(EditUserRequest model)
        {
            using (var conn = this.OpenConnection())
            {
                string sql = @"
UPDATE TOP(1) [User]
SET Email=@Email, Nickname=@Nickname
WHERE ID=@ID
";

                var para = new
                {
                    ID = model.ID
                };

                var rows = conn.Execute(sql, para);

                if (rows > 0)
                {
                    return OperationResult.SuccessResult();
                }
                else
                {
                    return OperationResult.ErrorResult("不存在的用户");
                }
            }
        }
        public UserModel Get(string token)
        {
            using (var conn = this.OpenConnection())
            {
                string sql = @"
SELECT TOP 1 * FROM [User]
WHERE Token=@Token
";
                var para = new
                {
                    Token = token
                };

                return conn.Query<UserModel>(sql, para).FirstOrDefault();
            }
        }
        public OperationResult ChangePassword(int id, string oldPassword, string newPassword)
        {
            using (var conn = this.OpenConnection())
            {
                string sql = @"
UPDATE TOP(1) [User]
SET Password=@NewPassword
WHERE ID=@ID AND Password=@OldPassword;
";

                oldPassword = Utility.MD5(oldPassword);
                newPassword = Utility.MD5(newPassword);

                var para = new
                {
                    ID = id,
                    OldPassword = oldPassword,
                    NewPassword = newPassword
                };

                var rows = conn.Execute(sql, para);

                if (rows > 0)
                {
                    return OperationResult.SuccessResult();
                }
                else
                {
                    return OperationResult.ErrorResult("密码错误");
                }
            }
        }
        public UserModel Get(int id)
        {
            using (var conn = this.OpenConnection())
            {
                string sql = @"
SELECT TOP 1 * FROM [User]
WHERE ID=@ID;
";
                var para = new
                {
                    ID = id
                };

                return conn.Query<UserModel>(sql, para).FirstOrDefault();
            }
        }