All Projects β†’ phnx47 β†’ dapper-repositories

phnx47 / dapper-repositories

Licence: MIT license
CRUD for Dapper

Programming Languages

C#
18002 projects

Projects that are alternatives of or similar to dapper-repositories

Microorm.dapper.repositories
CRUD for Dapper
Stars: ✭ 424 (-18.93%)
Mutual labels:  crud, repository, nuget, query-builder, dapper, poco, sqlserver
Banana
🍌 The collection of CRUD helpers for Dapper.
Stars: ✭ 61 (-88.34%)
Mutual labels:  repository, micro-orm, dapper
CodexMicroORM
An alternative to ORM's such as Entity Framework, offers light-weight database mapping to your existing CLR objects. Visit "Design Goals" on GitHub to see more rationale and guidance.
Stars: ✭ 32 (-93.88%)
Mutual labels:  micro-orm, dapper, poco
Dommel
CRUD operations with Dapper made simple.
Stars: ✭ 291 (-44.36%)
Mutual labels:  crud, query-builder, dapper
GraphQL.RepoDB
A set of extensions for working with HotChocolate GraphQL and Database access with micro-orms such as RepoDb (or Dapper). This extension pack provides access to key elements such as Selections/Projections, Sort arguments, & Paging arguments in a significantly simplified facade so this logic can be leveraged in the Serivces/Repositories that enca…
Stars: ✭ 25 (-95.22%)
Mutual labels:  repository, dapper, sqlserver
Evolutility Server Node
Model-driven REST or GraphQL backend for CRUD and more, written in Javascript, using Node.js, Express, and PostgreSQL.
Stars: ✭ 84 (-83.94%)
Mutual labels:  crud, query-builder
Slick Repo
CRUD Repositories for Slick based persistence Scala projects.
Stars: ✭ 120 (-77.06%)
Mutual labels:  crud, repository
Php Crud Api
Single file PHP script that adds a REST API to a SQL database
Stars: ✭ 2,904 (+455.26%)
Mutual labels:  crud, sqlserver
repository
[PHP 7] Implementation and definition of a base Repository in Domain land.
Stars: ✭ 26 (-95.03%)
Mutual labels:  crud, repository
Dotnetcore
.NET 5 Nuget Packages.
Stars: ✭ 146 (-72.08%)
Mutual labels:  repository, nuget
database
Database Abstraction Layer, Schema Introspection, Schema Generation, Query Builders
Stars: ✭ 51 (-90.25%)
Mutual labels:  query-builder, sqlserver
flepper
Flepper is a library to aid in database interaction. 🐸
Stars: ✭ 60 (-88.53%)
Mutual labels:  query-builder, dapper
Ezsql
PHP class to make interacting with a database ridiculusly easy
Stars: ✭ 804 (+53.73%)
Mutual labels:  crud, sqlserver
Data
Fast DB-independent DAL for .NET Core: abstract queries, SQL commands builder, schema-less data access, POCO mapping (micro-ORM).
Stars: ✭ 150 (-71.32%)
Mutual labels:  crud, poco
CSJsonDB
A C# package that performs basic CRUD ( Create, Read, Update, Delete ) operations on a Json file, used for sample minimalistic DBs.
Stars: ✭ 75 (-85.66%)
Mutual labels:  crud, nuget
Dapper.AmbientContext
Ambient context implementation for Dapper.NET
Stars: ✭ 31 (-94.07%)
Mutual labels:  repository, dapper
TableStorage.Abstractions.POCO
Builds on top of TableStorage.Abstractions (a repository wrapper over Azure Table Storage) such that objects to be serialized to and from Azure Table Storage are Plain Old CLR Objects (POCO) rather than TableEntities.
Stars: ✭ 20 (-96.18%)
Mutual labels:  repository, poco
Goldeneye
The CQRS flavoured framework that will speed up your WebAPI and Microservices development
Stars: ✭ 171 (-67.3%)
Mutual labels:  nuget, dapper
CRUD.ASPCore.Reactjs.WebAPI.EF
CRUD Operations in ASP.NET Core application using React.js , Web API and Entity Framework core DB first approach with the help of VS 2017.
Stars: ✭ 80 (-84.7%)
Mutual labels:  crud, sqlserver
APICorePayLots
Web API designed in Asp.NET Core 3.1, using Dapper and Entity Framework Core, Repository Pattern, Identity
Stars: ✭ 13 (-97.51%)
Mutual labels:  dapper, dapper-donet-core

MicroOrm.Dapper.Repositories

CI NuGet NuGet CodeFactor License MIT

I see a lot Issues, but I don't have enough time to solve them. Feel free to open Pull Request or ask to add you as Member to support project!

Description

If you like your code to run fast, you probably know about Micro ORMs. They are simple and one of their main goals is to be the fastest execution of your SQL sentences in you data repository. For some Micro ORM's you need to write your own SQL sentences and this is the case of the most popular Micro ORM Dapper

This tool abstracts the generation of the SQL sentence for CRUD operations based on each C# POCO class "metadata". We know there are plugins for both Micro ORMs that implement the execution of these tasks, but that's exactly where this tool is different. The "SQL Generator" is a generic component that generates all the CRUD sentences for a POCO class based on its definition and the possibility to override the SQL generator and the way it builds each sentence.

The original idea was taken from Yoinbol.

Installation

dotnet add package MicroOrm.Dapper.Repositories

Docs

Metadata attributes

[Key]
From System.ComponentModel.DataAnnotations - Use for primary key.

[Identity]
Use for identity key.

[Table]
From System.ComponentModel.DataAnnotations.Schema - By default the database table name will match the model name but it can be overridden with this.

[Column]
From System.ComponentModel.DataAnnotations.Schema - By default the column name will match the property name but it can be overridden with this.

[NotMapped]
From System.ComponentModel.DataAnnotations.Schema - For "logical" properties that do not have a corresponding column and have to be ignored by the SQL Generator.

[Deleted], [Status]
For tables that implement "logical deletes" instead of physical deletes. Use this to decorate the bool or enum.

[LeftJoin]
Left join for property: Collection and object are supported.

[InnerJoin]
Inner join for property: Collection and object are supported.

[RightJoin]
Right join for property: Collection and object are supported.

[CrossJoin] - SQLite only
Cross join for property: Collection and object are supported.

[UpdatedAt]
Automatically set DataTime.UtcNow (You can use local date or define offset) for Insert and Update.

Notes

  • By default the SQL Generator is going to map the POCO name with the table name, and each public property to a column.
  • If the [Deleted] is used on a certain POCO, the sentence will be an update instead of a delete.
  • Supports complex primary keys.
  • Supports simple Joins.
  • For this moment, with MSSQL you can only use limit with offset if you call OrderBy first, otherwise limit will be ignored.
  • It has a problem when try to use GUID with dapper in Oracle. In this case it doesn't work. details see DapperLib/Dapper#633 DapperLib/Dapper#637 vauto/Dapper.Database#1

Maps

"Users" POCO:

[Table("Users")]
public class User
{
    [Key, Identity]
    public int Id { get; set; }

    public string ReadOnly => "test"; // because don't have set

    public string Name { get; set; }

    public int AddressId { get; set; }

    [LeftJoin("Cars", "Id", "UserId")]
    public List<Car> Cars { get; set; }

    [LeftJoin("Addresses", "AddressId", "Id")]
    public Address Address { get; set; }

    [Status, Deleted]
    public bool Deleted { get; set; }

    [UpdatedAt]
    public DateTime? UpdatedAt { get; set; }
}

"Cars" POCO:

[Table("Cars")]
public class Car
{
    [Key, Identity]
    public int Id { get; set; }

    public string Name { get; set; }

    public byte[] Data { get; set; }

    public int UserId { get; set; }

    [LeftJoin("Users", "UserId", "Id")]
    public User User { get; set; }

    [Status]
    public StatusCar Status { get; set; }
}

public enum StatusCar
{
    Inactive = 0,

    Active = 1,

    [Deleted]
    Deleted = -1
}

Example Implements the simple repository:

public class UserRepository : DapperRepository<User>
{
    public UserRepository(IDbConnection connection, ISqlGenerator<User> sqlGenerator)
        : base(connection, sqlGenerator)
    {

    }
}

Queries

Find by ID:

var user = await userRepository.FindAsync(x => x.Id == 5);

Query with limit:

var limit = 10u;
var users = await userRepository.SetLimit(limit).FindAllAsync();

Query with limit and offset:

var limit = 10u;
var offset = 5u;
var users = await userRepository.SetLimit(limit, offset).FindAllAsync();

Query with OrderBy:

var users = await userRepository.SetOrderBy(OrderInfo.SortDirection.DESC, x => x.CreatedAt).FindAllAsync();

Query with SetSelect:

var users = await userRepository.SetSelect(x => new {x.Id, x.Name}).FindAllAsync();

Find all users for AccountId equals to 3 and not logical deleted:

var allUsers = await userRepository.FindAllAsync(x => x.AccountId == 3 && x.Deleted != false);

Example with Asp.Net Core and D.I

Configure Services

//Your DB Provider
MicroOrmConfig.SqlProvider = SqlProvider.MySQL;
//Not required
MicroOrmConfig.TablePrefix = "db1_";
//Add generic SqlGenerator as singleton
services.AddSingleton(typeof(ISqlGenerator<>), typeof(SqlGenerator<>));
//Your db factory
services.AddSingleton<IDbConnectionFactory, DbFactory>(x => new DbFactory(appSettings.DbConnectionString));

Example implements BaseRepository with IDbConnectionFactory

public class BaseRepository<T> : DapperRepository<T> where T : class
{
    private readonly IDbConnectionFactory _factory;
    public BaseRepository(IDbConnectionFactory factory, ISqlGenerator<T> generator)
        : base(factory.OpenDbConnection(), generator)
    {
        _factory = factory;
    }
        
    protected IDbConnection GetConnection()
    {
        return _factory.OpenDbConnection();
    }
 }

Contributors

Contribute

Contributions to the package are always welcome!

License

All contents of this package are licensed under the MIT license.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].