Dapper.FSharp icon indicating copy to clipboard operation
Dapper.FSharp copied to clipboard

Adding pipeline API?

Open eagle-k opened this issue 2 years ago • 1 comments

This is a proposal to add a new API to this library. When using plain Dapper, it would be useful to be able to pass CommandText, Parameters, etc. through the pipeline.
The following is an example code.

[<CLIMutable>]
type Customer = { Id: int; Name: string }

task {
    use connection = // ...
    do! connection.OpenAsync(cts.Token)

    return!
        "select Id, Name from Customer where ID = @ID"
        |> CommandDef.create
        |> CommandDef.withParameters {| ID = 42 |}
        |> CommandDef.withCancellationToken cts.Token
        |> connection.QuerySingleAsync<Customer>
}

It would be great to see Dapper.FSharp support the F# idiomatic pipeline API for plain Dapper cases.

Prototype: https://github.com/eagle-k/Dapper.FSharp.Pipeline

This prototype also includes support for F# Async. F# Async should come in handy when dealing with CancellationToken.

eagle-k avatar May 17 '23 18:05 eagle-k

Hi @eagle-k,

I like this approach, but I am not sure how it will work with the current LINQ-like API (mainly based on computation expressions). I think this should be a separated project not necessarily based on Dapper.FSharp? 🤔

Dzoukr avatar May 18 '23 06:05 Dzoukr