Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@ITSecMedia
Forked from Dzoukr/Dapper.Extensions.fs
Created October 4, 2019 16:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ITSecMedia/bbd8b63ffb4d5a92829b9966977f8d1e to your computer and use it in GitHub Desktop.
Save ITSecMedia/bbd8b63ffb4d5a92829b9966977f8d1e to your computer and use it in GitHub Desktop.
F# extensions for Dapper
module Dapper.Extensions
open System
open System.Data.SqlClient
open Dapper
let extractValue (x:obj) =
match x with
| null -> null
| _ -> match x.GetType().GetProperty("Value") with
| null -> x
| prop -> prop.GetValue(x)
let (+>) (map:Map<string, obj>) (key,value) = map.Add(key, extractValue value)
let singleParam (key, value) = (Map.empty) +> (key,value)
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>())
let safeSqlConnection string =
registerTypeHandlers()
new SqlConnection(string)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment