{"id":25349281,"url":"https://github.com/ollieday/daffer","last_synced_at":"2025-08-06T16:05:30.539Z","repository":{"id":65451487,"uuid":"139488843","full_name":"OllieDay/Daffer","owner":"OllieDay","description":"Functional wrapper for Dapper","archived":false,"fork":false,"pushed_at":"2024-09-12T23:11:04.000Z","size":17,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-01T01:59:32.167Z","etag":null,"topics":["dapper","dotnet","f-sharp","library","sql"],"latest_commit_sha":null,"homepage":"","language":"F#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OllieDay.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-07-02T20:06:31.000Z","updated_at":"2024-09-12T23:11:00.000Z","dependencies_parsed_at":"2025-05-30T16:25:32.726Z","dependency_job_id":"295489e3-e3dc-4b4b-a888-ddbc522e63cb","html_url":"https://github.com/OllieDay/Daffer","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/OllieDay/Daffer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OllieDay%2FDaffer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OllieDay%2FDaffer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OllieDay%2FDaffer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OllieDay%2FDaffer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OllieDay","download_url":"https://codeload.github.com/OllieDay/Daffer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OllieDay%2FDaffer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269109261,"owners_count":24361240,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-06T02:00:09.910Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dapper","dotnet","f-sharp","library","sql"],"created_at":"2025-02-14T16:02:24.472Z","updated_at":"2025-08-06T16:05:30.515Z","avatar_url":"https://github.com/OllieDay.png","language":"F#","readme":"# Daffer\n\nFunctional wrapper for Dapper.\n\n- Provides a set of F# friendly functions for Dapper\n- Makes passing parameters less noisy using `[\"name\" =\u003e value]`\n- Converts `IEnumerable\u003c'T\u003e` to `'T list`\n- Converts `Task\u003c'T\u003e` to `Async\u003c'T\u003e`\n- Provides alternatives to `QueryFirstOrDefault\u003c'T\u003e` and `QuerySingleOrDefault\u003c'T\u003e` that returns `'T option`\n- Handles conversion of primitives to and from `'T option`\n\n## Getting started\n\nInstall the NuGet package into your application.\n\n### Package manager\n\n```shell\nInstall-Package Daffer\n```\n\n### .NET CLI\n\n```shell\ndotnet add package Daffer\n```\n\n## Usage\n\n```fsharp\nlet user = query\u003cUser\u003e connection \"SELECT * FROM Users WHERE Id = @Id\" [\"Id\" =\u003e 1]\n```\n\n### Maybe functions\n\nFunctions returning `null` have a counterpart that returns `'T option` instead.\n\n| `null`                          |         `'T option`         |\n| --------------------------------|---------------------------- |\n| `queryFirstOrDefault\u003c'T\u003e`       | `queryFirstMaybe\u003c'T\u003e`       |\n| `queryFirstOrDefaultAsync\u003c'T\u003e`  | `queryFirstMaybeAsync\u003c'T\u003e`  |\n| `querySingleOrDefault\u003c'T\u003e`      | `querySingleMaybe\u003c'T\u003e`      |\n| `querySingleOrDefaultAsync\u003c'T\u003e` | `querySingleMaybeAsync\u003c'T\u003e` |\n\n### Converting primitives to and from `'T option`\n\nThe following primitive types can be automatically converted to and from `'T option` by calling `addOptionHandlers`\non application initialization.\n\n- `bool`\n- `byte`\n- `sbyte`\n- `char`\n- `single`\n- `double`\n- `decimal`\n- `int8`\n- `uint8`\n- `int16`\n- `uint16`\n- `int32`\n- `uint32`\n- `int64`\n- `uint64`\n- `string`\n- `Guid`\n- `DateTime`\n\n### Optional arguments\n\nThe `Builder` module can be used for calling the underlying Dapper methods with optional arguments such as:\n\n- `transaction`\n- `commandTimeout`\n- `commandType`\n- `buffered`\n\n```fsharp\nlet user =\n    Builder.create ()\n        |\u003e Builder.addTransaction transaction\n        |\u003e Builder.addCommandTimeout 1000\n        |\u003e Builder.addCommandType CommandType.StoredProcedure\n        |\u003e Builder.addBuffered false\n        |\u003e Builder.query\u003cUser\u003e connection \"SELECT * FROM Users WHERE Id = @Id\" [\"id\" =\u003e 1]\n```\n\n## Definitions\n\n```fsharp\ntype Parameter = string * obj\n\n(=\u003e)                          : string -\u003e obj -\u003e Parameter\n\naddOptionHandlers             : unit -\u003e unit\n\nexecute                       : IDbConnection -\u003e string -\u003e Parameter list -\u003e int\nexecuteAsync                  : IDbConnection -\u003e string -\u003e Parameter list -\u003e Async\u003cint\u003e\nexecuteReader                 : IDbConnection -\u003e string -\u003e Parameter list -\u003e IDataReader\nexecuteReaderAsync            : IDbConnection -\u003e string -\u003e Parameter list -\u003e Async\u003cIDataReader\u003e\nexecuteScalar\u003c'T\u003e             : IDbConnection -\u003e string -\u003e Parameter list -\u003e 'T\nexecuteScalarAsync\u003c'T\u003e        : IDbConnection -\u003e string -\u003e Parameter list -\u003e Async\u003c'T\u003e\nquery\u003c'T\u003e                     : IDbConnection -\u003e string -\u003e Parameter list -\u003e 'T list\nqueryAsync\u003c'T\u003e                : IDbConnection -\u003e string -\u003e Parameter list -\u003e Async\u003c'T list\u003e\nqueryFirst\u003c'T\u003e                : IDbConnection -\u003e string -\u003e Parameter list -\u003e 'T\nqueryFirstAsync\u003c'T\u003e           : IDbConnection -\u003e string -\u003e Parameter list -\u003e Async\u003c'T\u003e\nqueryFirstOrDefault\u003c'T\u003e       : IDbConnection -\u003e string -\u003e Parameter list -\u003e 'T\nqueryFirstOrDefaultAsync\u003c'T\u003e  : IDbConnection -\u003e string -\u003e Parameter list -\u003e Async\u003c'T\u003e\nqueryMultiple                 : IDbConnection -\u003e string -\u003e Parameter list -\u003e SqlMapper.GridReader\nqueryMultipleAsync            : IDbConnection -\u003e string -\u003e Parameter list -\u003e Async\u003cSqlMapper.GridReader\u003e\nquerySingle\u003c'T\u003e               : IDbConnection -\u003e string -\u003e Parameter list -\u003e 'T\nquerySingleAsync\u003c'T\u003e          : IDbConnection -\u003e string -\u003e Parameter list -\u003e Async\u003c'T\u003e\nquerySingleOrDefault\u003c'T\u003e      : IDbConnection -\u003e string -\u003e Parameter list -\u003e 'T\nquerySingleOrDefaultAsync\u003c'T\u003e : IDbConnection -\u003e string -\u003e Parameter list -\u003e Async\u003c'T\u003e\nqueryFirstMaybe\u003c'T\u003e           : IDbConnection -\u003e string -\u003e Parameter list -\u003e 'T option\nqueryFirstMaybeAsync\u003c'T\u003e      : IDbConnection -\u003e string -\u003e Parameter list -\u003e Async\u003c'T option\u003e\nquerySingleMaybe\u003c'T\u003e          : IDbConnection -\u003e string -\u003e Parameter list -\u003e 'T option\nquerySingleMaybeAsync\u003c'T\u003e     : IDbConnection -\u003e string -\u003e Parameter list -\u003e Async\u003c'T option\u003e\n```\n\n## Builder definitions\n\n```fsharp\ntype Build = {\n    Transaction : IDbTransaction option\n    CommandTimeout : int option\n    CommandType : CommandType option\n    Buffered : bool option\n}\n\ncreate                        : unit -\u003e Build\n\naddTransaction                : IDbTransaction -\u003e Build -\u003e Build\naddCommandTimeout             : int -\u003e Build -\u003e Build\naddCommandType                : CommandType -\u003e Build -\u003e Build\naddBuffered                   : bool -\u003e Build -\u003e Build\n\nexecute                       : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e int\nexecuteAsync                  : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e Async\u003cint\u003e\nexecuteReader                 : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e IDataReader\nexecuteReaderAsync            : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e Async\u003cIDataReader\u003e\nexecuteScalar\u003c'T\u003e             : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e 'T\nexecuteScalarAsync\u003c'T\u003e        : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e Async\u003c'T\u003e\nquery\u003c'T\u003e                     : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e 'T list\nqueryAsync\u003c'T\u003e                : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e Async\u003c'T list\u003e\nqueryFirst\u003c'T\u003e                : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e 'T\nqueryFirstAsync\u003c'T\u003e           : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e Async\u003c'T\u003e\nqueryFirstOrDefault\u003c'T\u003e       : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e 'T\nqueryFirstOrDefaultAsync\u003c'T\u003e  : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e Async\u003c'T\u003e\nqueryMultiple                 : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e SqlMapper.GridReader\nqueryMultipleAsync            : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e Async\u003cSqlMapper.GridReader\u003e\nquerySingle\u003c'T\u003e               : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e 'T\nquerySingleAsync\u003c'T\u003e          : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e Async\u003c'T\u003e\nquerySingleOrDefault\u003c'T\u003e      : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e 'T\nquerySingleOrDefaultAsync\u003c'T\u003e : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e Async\u003c'T\u003e\nqueryFirstMaybe\u003c'T\u003e           : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e 'T option\nqueryFirstMaybeAsync\u003c'T\u003e      : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e Async\u003c'T option\u003e\nquerySingleMaybe\u003c'T\u003e          : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e 'T option\nquerySingleMaybeAsync\u003c'T\u003e     : IDbConnection -\u003e string -\u003e Parameter list -\u003e Build -\u003e Async\u003c'T option\u003e\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Follieday%2Fdaffer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Follieday%2Fdaffer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Follieday%2Fdaffer/lists"}