Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. module DapperFSharp =
  2. open System
  3. open System.Dynamic
  4. open System.Collections.Generic
  5. open Dapper
  6.  
  7. let toParams (param : Map<string,_>) =
  8. let expando = ExpandoObject()
  9. let expandoDictionary = expando :> IDictionary<string,obj>
  10. for paramValue in param do
  11. expandoDictionary.Add(paramValue.Key, paramValue.Value :> obj)
  12. expando
  13.  
  14. let scalar<'Result> (query:string) (connection:MySql.Data.MySqlClient.MySqlConnection) =
  15. connection.ExecuteScalarAsync<'Result>(query) |> Async.AwaitTask
  16.  
  17. let executeQuery (query:string) (param : Map<string,_>) (connection:MySql.Data.MySqlClient.MySqlConnection) =
  18. connection.ExecuteAsync(query, (toParams param)) |> Async.AwaitTask
  19.  
  20. type OptionHandler<'T>() =
  21. inherit SqlMapper.TypeHandler<option<'T>>()
  22.  
  23. override __.SetValue(param, value) =
  24. let valueOrNull =
  25. match value with
  26. | Some x -> box x
  27. | None -> null
  28.  
  29. param.Value <- valueOrNull
  30.  
  31. override __.Parse value =
  32. if isNull value || value = box DBNull.Value
  33. then None
  34. else Some (value :?> 'T)
  35.  
  36. let registerTypeHandlers() =
  37. SqlMapper.AddTypeHandler (OptionHandler<Guid>())
  38. SqlMapper.AddTypeHandler (OptionHandler<int64>())
  39. SqlMapper.AddTypeHandler (OptionHandler<int>())
  40. SqlMapper.AddTypeHandler (OptionHandler<string>())
  41. SqlMapper.AddTypeHandler (OptionHandler<DateTime>())
  42. SqlMapper.AddTypeHandler (OptionHandler<string>())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement