Giter Club home page Giter Club logo

dataabstractions.dapper's Introduction

DataAbstractions.Dapper NuGet

A light abstraction around Dapper and Dapper.Contrib that also maintains the behavior IDbConnection. This library facilitates a loosely coupled design and unit testing.

IDataAccessor Interface

The IDataAccessor interface encapsulates Dapper extension methods. Just provide the connection to the DataAccessor.

IDataAccessor dataAccessor = new DataAccessor(new SqlConnection(connectionString));
        

Execute Dapper queries and commands as you would normally.

var person = await dataAccessor.QueryAsync<Person>(sql, new {Id});

Note: The dataAccessor should be disposed appropriately.

IDataReaderAccessor Interface

IDataReaderAccessor encapsulates IDataReader extension methods. Use GetDataReaderAccessor() to convert the IDataReader object to an IDataReaderAccessor.

var dataReader = await dataAccessor.ExecuteReaderAsync(sql);
var dataReaderAccessor = dataAccessor.GetDataReaderAccessor(dataReader);
var result = dataReaderAccessor.Parse<Person>();
        

Dapper.Contrib

IDataAccessor includes the Dapper.Contrib extension methods

dataAccessor.Insert(new Person { Name = "John Doe" });

Keeps IDbConnection behavior

IDataAccessor implements IDbConnection, so you can access things like the ConnectionTimeout, ConnectionString, and ConnectionState etc.

If you need access to the actual connection object, use GetUnderlyingConnection():

IDbConnection connection = dataAccessor.GetUnderlyingConnection();

dataabstractions.dapper's People

Contributors

codeapologist avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

dataabstractions.dapper's Issues

QueryMultiple

Hello,
can QueryMultiple return something like IGridReader so it can be mocked? :)
thanks

Question: How does this work for DI and also IDisposable?

We currently use this library to be able to unit test our repository classes but now we are in a situation where we are not utilising connection pooling properly because the connection is already created (and injected) when the repository is invoked, you cannot use the normal using syntax when creating a connection inside an individual method.

I can't think of the correct pattern:

  1. Use the normal using ( var connection = new DataAccessor(...) ) which disposes and pools correctly but prevents constructor injection being possible so unit tests won't work.

  2. Inject IDataAccessor into the constructor as we currently do. This allows unit tests but does not permit the use of using, which means we should probably open the connection in the constructor and ensure our DI services are created in a liftetime scope so they don't tie up the connection for too long.

  3. Inject the IDataAccessor into the constructor but don't open it and then in every method, call Open() and Close(). This would generate more code but would ensure we are not holding onto connections and not opening the connection if we don't need it (since we are using EF for some parts of the repositories)

  4. Have constructor overloads one that takes IDataAccessor for unit tests and one that doesn't but then how would a method use the correct connection e.g. if the shared conn from the unit tests is available, use that, otherwise use the using syntax. This sounds messy.

Do you have any ideas? Thanks.

IDataReader parsing

Is there any way you could add a mockable interface to replace the IDataReader, returned by ExecuteReader methods?

There are more extension methods applied to this type by the source Dapper library.
For instance, below:
return dataReader.Parse<T>();
where dataReader is an IDataReader

Parse is an extension method defined by dapper

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.