{"id":15411733,"url":"https://github.com/tbertuzzi/repositoryhelpers","last_synced_at":"2025-04-19T03:19:53.373Z","repository":{"id":48263681,"uuid":"159658957","full_name":"TBertuzzi/RepositoryHelpers","owner":"TBertuzzi","description":":package: Extensions for HttpClient and Custom Repository based on dapper","archived":false,"fork":false,"pushed_at":"2024-04-18T13:07:54.000Z","size":139,"stargazers_count":28,"open_issues_count":7,"forks_count":6,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-12T19:17:38.937Z","etag":null,"topics":["adonet","asynchronous","asynctask","customquery","dapper","dapper-extensions","database","dictionary","executequery","httpclient","identity","insert","litedb","primarykey"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TBertuzzi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2018-11-29T11:55:40.000Z","updated_at":"2024-05-17T01:51:11.000Z","dependencies_parsed_at":"2024-10-20T14:34:45.392Z","dependency_job_id":null,"html_url":"https://github.com/TBertuzzi/RepositoryHelpers","commit_stats":{"total_commits":107,"total_committers":3,"mean_commits":"35.666666666666664","dds":"0.14953271028037385","last_synced_commit":"e08447800495e0c86ba2d35718d56341bd344ce7"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TBertuzzi%2FRepositoryHelpers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TBertuzzi%2FRepositoryHelpers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TBertuzzi%2FRepositoryHelpers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TBertuzzi%2FRepositoryHelpers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TBertuzzi","download_url":"https://codeload.github.com/TBertuzzi/RepositoryHelpers/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249191277,"owners_count":21227535,"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","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":["adonet","asynchronous","asynctask","customquery","dapper","dapper-extensions","database","dictionary","executequery","httpclient","identity","insert","litedb","primarykey"],"created_at":"2024-10-01T16:49:58.493Z","updated_at":"2025-04-16T03:32:48.167Z","avatar_url":"https://github.com/TBertuzzi.png","language":"C#","readme":"# RepositoryHelpers\n\nExtensions for HttpClient and Custom Repository based on dapper\n\n###### This is the component, works on .NET Core and.NET Framework\n\n**Info**\n\n|Code Quality|Build|Nuget|Contributors|\n| ------------------- | ------------------- | ------------------- | ------------------- |\n|[![Codacy Badge](https://api.codacy.com/project/badge/Grade/ea9b954b18e942d4800825dccd6ef77c)](https://app.codacy.com/app/TBertuzzi/RepositoryHelpers?utm_source=github.com\u0026utm_medium=referral\u0026utm_content=TBertuzzi/RepositoryHelpers\u0026utm_campaign=Badge_Grade_Dashboard)|[![Publish package on NuGet](https://github.com/TBertuzzi/RepositoryHelpers/actions/workflows/dotnet.yml/badge.svg)](https://github.com/TBertuzzi/RepositoryHelpers/actions/workflows/dotnet.yml)|[![NuGet](https://buildstats.info/nuget/RepositoryHelpers)](https://www.nuget.org/packages/RepositoryHelpers/)|[![GitHub contributors](https://img.shields.io/github/contributors/TBertuzzi/RepositoryHelpers.svg)](https://github.com/TBertuzzi/RepositoryHelpers/graphs/contributors)|\n\n\n\n\n**Build History**\n\n[![Build history](https://buildstats.info/appveyor/chart/ThiagoBertuzzi/repositoryhelpers?buildCount=7)](https://ci.appveyor.com/project/ThiagoBertuzzi/repositoryhelpers/history)\n\n**Platform Support**\n\nRepositoryHelpers is a .NET Standard 2.0 library.\n\n**Database/Dapper Extensions**\n\nUse the connection class to define the type of database and connection string\n\n```csharp\n var connection = new Connection()\n {\n     Database = RepositoryHelpers.Utils.DataBaseType.SqlServer, //RepositoryHelpers.Utils.DataBaseType.Oracle\n     ConnectionString = \"Your string\"\n };\n```\n\nCreate a CustomRepository of the type of object you want to return\n\n```csharp\n  var Repository = new CustomRepository\u003cUser\u003e(conecction);\n``````\n\nMapping with Attributes:\n\n```csharp\n[DapperIgnore] // Property will be ignored in select, insert and update\npublic string InternalControl { get; set; }\n[PrimaryKey] // Primary key\npublic int MyCustomId { get; set; }\n[PrimaryKey]\n[Identity] //Indicates that the primary key has some identity, sequence or auto increment\npublic int MyBdIdIndentity { get; set; }\n\n//You can optionally map the name of the Database table that refers to the entity\n[Table(\"Product\")] \npublic class Products\n{\n    public int Id { get; set; }\n}\n\n``````\n\nMapping with FluentMapper:\n\nInstall and use the [**Dapper.FluentMap.Dommel**](https://github.com/henkmollema/Dapper-FluentMap#dommel) package to map your entities by creating the specific classes inherited from *DommelEntityMap*:\n\n```csharp\npublic class ProductMap : DommelEntityMap\u003cProduct\u003e\n{\n    public ProductMap()\n    {\n        Map(p =\u003e p.Id).IsKey().IsIdentity();\n        Map(p =\u003e p.Category).Ignore();\n    }\n}\n\n```\n\nYou can define the name of the table that will be mapped\n\n```csharp\npublic class ProductMap : DommelEntityMap\u003cProduct\u003e\n{\n    public ProductMap()\n    {\n        ToTable(\"Product\");\n        Map(p =\u003e p.Id).IsKey().IsIdentity();\n        Map(p =\u003e p.Category).Ignore();\n    }\n}\n\n```\n\n\nAfter that, you must configure Dapper.FluentMap.Dommel in RepositoryHelpers:\n\n```csharp\nMapper.Initialize(c =\u003e\n{\n    c.AddMap(new ProductMap());\n});\n\n```\n\nGet Data:\n\nTo get results just use the Get method. can be syncronous or asynchronous\n\n```csharp\n//Get All Users\nvar usersAsync = await Repository.GetAsync();\nvar users = Repository.Get();\n\n//Get User by Id\nvar userAsync = await Repository.GetByIdAsync(1);\nvar user = Repository.GetById(1);\n\n//Get by CustomQuery with parameters\nvar customQuery = \"Select name from user where login = @userLogin\";\nvar parameters = new Dictionary\u003cstring, object\u003e { { \"userLogin\", \"bertuzzi\" } };\nvar resultASync = await Repository.GetAsync(customQuery, parameters);\nvar result = Repository.Get(customQuery, parameters);\n\n//Get by CustomQuery without parameters\nvar customQuery = \"Select * from user\";\nvar resultASync = await Repository.GetAsync(customQuery);\nvar result = Repository.Get(customQuery);\n\n//Get by multi-mapping custom query with 2 input types\nvar customQuery = \"Select * from user inner join category on user.categoryId = category.Id where login = @userLogin\";\nvar user = Repository.Get\u003cUser, Category, User\u003e(\n    customQuery,\n    map: (user, category) =\u003e \n    {\n        user.Category = category;\n        return user;\n    });\n\n//Get by multi-mapping custom query with 2 input types (When the field that we should split and read the second object is different from \"Id\")\nvar customQuery = \"Select * from user inner join state on user.stateCode = state.Code where login = @userLogin\";\nvar user = Repository.Get\u003cUser, State, User\u003e(\n    customQuery,\n    map: (user, state) =\u003e \n    {\n        user.State = state;\n        return user;\n    },\n    parameters,\n    splitOn: \"Code\"\n);\n\n//Get by multi-mapping custom query with an arbitrary number of input types\nvar customQuery = \"Select * from user inner join category on user.categoryId = category.Id where login = @userLogin\";\nvar user = Repository.Get(\n    customQuery,\n    new[] { typeof(User), typeof(Category) },\n    map: (types) =\u003e \n    {\n        var user = (types[0] as User);\n        user.Category = (types[1] as Category);\n        return user;\n    });\n```\n\nInsert Data :\n\nuser identity parameter to return the id if your insert needs\n\n```csharp\nRepository.Insert(NewUser, true);\n```\n\nUpdate data\n\n```csharp\nRepository.Update(updateUser);\nRepository.UpdateAsync(updateUser);\n```\n\nDelete data\n\n```csharp\nRepository.Delete(1);\nRepository.DeleteAsync(1);\n```\n\nYou can use ADO if you need\n\n```csharp\n//Return DataSet\nvar customQuery = \"Select name from user where login = @userLogin\";\nvar parameters = new Dictionary\u003cstring, object\u003e { { \"userLogin\", \"bertuzzi\" } };\nRepository.GetDataSet(customQuery, parameters);\n\n//ExecuteQuery\nRepository.ExecuteQueryAsync();\nRepository.ExecuteQuery();\n\n//ExecuteScalar\nRepository.ExecuteScalarAsync();\nRepository.ExecuteScalar();\n\n//ExecuteProcedure\nRepository.ExecuteProcedureAsync();\nRepository.ExecuteProcedure();\n```\n\nCustomTransaction is possible to use transaction\n\n```csharp\n\nCustomTransaction customTransaction = new CustomTransaction(YourConnection);\n\ncustomTransaction.BeginTransaction();\ncustomTransaction.CommitTransaction();\ncustomTransaction.RollbackTransaction();\n\n//Sample\nRepository.ExecuteQuery(\"yourquery\", parameters, customTransaction);\n\n\n```\n\n\nDapperIgnore : if you want some property of your object to be ignored by Dapper, when inserting or updating, just use the attribute.\nPrimaryKey : Define your primary key. It is used for queries, updates, and deletes.\nIdentityIgnore: Determines that the field has identity, autoincrement ... Warns the repository to ignore it that the database will manage the field\n\n*TIP Create a ConnectionHelper for BaseRepository and BaseTransaction to declare the connection only once :\n\n```csharp\n\n public sealed class ConnectionHelper\n    {\n        static ConnectionHelper _instance;\n        public static ConnectionHelper Instance\n        {\n            get { return _instance ?? (_instance = new ConnectionHelper()); }\n        }\n        private ConnectionHelper() \n        {\n            Connection = new Connection()\n            {\n                Database = RepositoryHelpers.Utils.DataBaseType.SqlServer,\n                ConnectionString = \"YourString\"\n            };\n        }\n        public Connection Connection { get; }\n    }\n    \n public class BaseRepository\u003cT\u003e\n    {\n        protected readonly CustomRepository\u003cT\u003e Repository;\n\n        protected BaseRepository()\n        {\n            Repository = new CustomRepository\u003cT\u003e(ConnectionHelper.Instance.Connection);\n        }\n    }\n    \n     public class BaseTransaction : CustomTransaction\n    {\n        public BaseTransaction() :\n             base(ConnectionHelper.Instance.Connection)\n        {\n           \n        }\n    }\n    \n```\n\n**LiteDB Extensions**\n\ncoming soon ..\n\n**HttpClient Extensions**\n\nExtensions to make using HttpClient easy.\n\nTo enable and use Follow the doc : https://github.com/TBertuzzi/HttpExtension\n\n\nSamples coming soon ..\n\nSpecial Thanks to project contributors\n\n* [André Secco](https://github.com/andreluizsecco/) \n\nSpecial Thanks users who reported bugs and helped improve the package :\n\n* Thiago Vieira\n* Luis Paulo Souza\n* Alexandre Harich\n\nThe RepositoryHelpers was developed by [Thiago Bertuzzi](http://bertuzzi.com.br) under the [MIT license](LICENSE).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftbertuzzi%2Frepositoryhelpers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftbertuzzi%2Frepositoryhelpers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftbertuzzi%2Frepositoryhelpers/lists"}