GenericDapperRepo.Wrapper
2.0.0
See the version list below for details.
dotnet add package GenericDapperRepo.Wrapper --version 2.0.0
NuGet\Install-Package GenericDapperRepo.Wrapper -Version 2.0.0
<PackageReference Include="GenericDapperRepo.Wrapper" Version="2.0.0" />
paket add GenericDapperRepo.Wrapper --version 2.0.0
#r "nuget: GenericDapperRepo.Wrapper, 2.0.0"
// Install GenericDapperRepo.Wrapper as a Cake Addin
#addin nuget:?package=GenericDapperRepo.Wrapper&version=2.0.0
// Install GenericDapperRepo.Wrapper as a Cake Tool
#tool nuget:?package=GenericDapperRepo.Wrapper&version=2.0.0
GenericRepo.Dapper.Wrapper
Provides a simple Generic Repository to fluently map model properties with database columns using Dapper to interact with the Db.
Introduction
This Dapper wrapper allows you to fluently configure the mapping between model properties and database columns. This keeps your model clean of mapping attributes. Also you do not have to rewrite SQL query each time you want to interact with different table through Dapper. This guy handles all of that by providing functions that wrap specific dapper functions into generic functions. It does not only end there, this library allows us to also manipulate data in the database using stored procedures. Therefore, add that into what we call generic repository.
NuGet | ------------ | version 2.0.0
Dependencies
- Dapper
- System.Data.SqlClient
- Newtonsoft.Json
Download
Install-Package GenericDapperRepo.Wrapper -Version 2.0.0
Usage
- These are functions available in version 2.0.0
Key | Description |
---|---|
Id | Id is a table key |
primarykeyName | primarykeyName is a key Column name. |
namesOfPropertiesToBeExcluded | names of columns that their values cannot be changed/columns that are keys ie Composite key, Id Number, Foreign Key, Candidate Key etc. You can provide as many as you want. |
T entity | T represent the table/entity. |
public interface IRepository<T>
{
Task<IEnumerable<T>> GetAllAsync();
Task<T> GetAsync(object id, string primaryKeyName);
Task<IEnumerable<T>> GetAllAsync(object id, string primaryKeyName);
Task<int> InsertAsync(T entity, params string[] namesOfPropertiesToBeExcluded);
Task<int> UpdateAsync(string primaryKeyName, T entity, params string[] namesOfPropertiesToBeExcluded);
Task<int> DeleteAsync(object id, string primaryKeyName);
}
- Update, Insert and Delete returns number of rows affected after executing the method
- This is how your specific repository declaration should look like
public class PersonRepository
{
private readonly IRepository<Person> _personRepository;
private const string TableName = "Persons";
private const string PrimaryKeyName = "Code";
public PersonRepository(string connectionString)
{
_personRepository = new Repository<Person>(TableName, connectionString);
}
}
- Your function implementation should look like this :
public async Task<IEnumerable<Person>> GetAllPeopleAsync()
{
return await _personRepository.GetAllAsync();
}
- For other available functions check IRepository interface provided at the top
Working with Stored Procedures
Usage
Key | Description |
---|---|
connectionString | A connection string is a string that specifies information about a data source, means of connecting to it. |
procName | Name of the stored procedure that will be using to query/manipulate data. |
parameters | These are key-value pairs that are required when calling stored procedure. |
object | Key-value pairs/object that consist of a name(s) that are tied to the stored procdure variable(s). |
T entity | T is the model. |
public interface IStoredProcProcessor
{
Task<IEnumerable<T>> GetDataAsync<T>(string procName, DynamicParameters parameters = null);
Task<int> ExecuteAsync(string procName, DynamicParameters parameters);
Task<int> ExecuteInBulkAsync(string procName, object @object );
}
- Parameters are optional base on the created stored procedure
- This is the only way to create StoredProcProcessor instance :
IStoredProcProcessor storedProcProcessor = new StoredProcProcessor(ConnectionString);
- GetDataAsync returns number of records in a list
- ExecuteAsync() and ExecuteInBulkAsync() return number of rows affected after execution
Configuration to consume ExecuteInBulkAsync()
- NB : This function works with table-valued parameter approach.
async Task<int> ExecuteInBulkAsync(string procName, object @object );
- Constructing an object has been made easy by the use of a utility class called DataTableProcessor. It is not a must to use this class
public static class DataTableProcessor
{
public static DataTable MapToDataTable<T>(List<T> list); //maps any model into DataTable
public static DataTable MapToDataTable(string jsonObject); //maps json data into DataTable
}
var listOfEmployees = ListOfEmployees(); // data type : List<RegisterEmployeeModel>
var dataTable = DataTableProcessor.MapToDataTable(listOfEmployees);
// OR
var dataTable = DataTableProcessor.MapToDataTable(GetJsonData()); //takes json data
var obj = new { employeeType = dataTable };
var results = await sut.ExecuteInBulkAsync(storedProcName, obj);
- NB : employeeType is the variable name in the stored procedure. This name must match exactly the variable name in the store procedure. Variable name is case sensitive.
- You can add more than one property inside the object as long as your stored procedure takes those arguments(parameters)
If you have any questions, suggestions, bugs or want to contribute, please don't hesitate to contact :-
- spantshwa.lukho@gmail.com
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- Dapper (>= 2.0.78)
- Newtonsoft.Json (>= 13.0.1)
- System.Data.SqlClient (>= 4.8.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Added feature to manipulate Database data using stored procedures