Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module DapperFSharp =
- open System
- open System.Dynamic
- open System.Collections.Generic
- open Dapper
- let toParams (param : Map<string,_>) =
- let expando = ExpandoObject()
- let expandoDictionary = expando :> IDictionary<string,obj>
- for paramValue in param do
- expandoDictionary.Add(paramValue.Key, paramValue.Value :> obj)
- expando
- let scalar<'Result> (query:string) (connection:MySql.Data.MySqlClient.MySqlConnection) =
- connection.ExecuteScalarAsync<'Result>(query) |> Async.AwaitTask
- let executeQuery (query:string) (param : Map<string,_>) (connection:MySql.Data.MySqlClient.MySqlConnection) =
- connection.ExecuteAsync(query, (toParams param)) |> Async.AwaitTask
- type OptionHandler<'T>() =
- inherit SqlMapper.TypeHandler<option<'T>>()
- override __.SetValue(param, value) =
- let valueOrNull =
- match value with
- | Some x -> box x
- | None -> null
- param.Value <- valueOrNull
- override __.Parse value =
- if isNull value || value = box DBNull.Value
- then None
- else Some (value :?> 'T)
- let registerTypeHandlers() =
- SqlMapper.AddTypeHandler (OptionHandler<Guid>())
- SqlMapper.AddTypeHandler (OptionHandler<int64>())
- SqlMapper.AddTypeHandler (OptionHandler<int>())
- SqlMapper.AddTypeHandler (OptionHandler<string>())
- SqlMapper.AddTypeHandler (OptionHandler<DateTime>())
- SqlMapper.AddTypeHandler (OptionHandler<string>())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement