Skip to content

Commit eb66fee

Browse files
Merge pull request #291 from johelvisguzman/dev
Milestone 2.5.0
2 parents 066e9b6 + 12a2e00 commit eb66fee

File tree

167 files changed

+17685
-7237
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

167 files changed

+17685
-7237
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,3 +286,6 @@ __pycache__/
286286
*.btm.cs
287287
*.odx.cs
288288
*.xsd.cs
289+
290+
# Benchmark
291+
/benchmarks/DotNetToolkit.Repository.Performance/BenchmarkDotNet.Artifacts

DotNetToolkit.Repository.sln

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,20 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetToolkit.Repository.In
1717
EndProject
1818
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetToolkit.Repository.EntityFrameworkCore", "src\DotNetToolkit.Repository.EntityFrameworkCore\DotNetToolkit.Repository.EntityFrameworkCore.csproj", "{0A9D9AA4-F01C-470F-AD5B-5A81EA7A398D}"
1919
EndProject
20-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetToolkit.Repository.Json", "src\DotNetToolkit.Repository.Json\DotNetToolkit.Repository.Json.csproj", "{B71EA207-390A-4AB0-BFC8-44BA124FC35B}"
21-
EndProject
22-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetToolkit.Repository.Xml", "src\DotNetToolkit.Repository.Xml\DotNetToolkit.Repository.Xml.csproj", "{BB858B77-5CE8-4301-9FB6-343FFF5B7E63}"
23-
EndProject
24-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetToolkit.Repository.Csv", "src\DotNetToolkit.Repository.Csv\DotNetToolkit.Repository.Csv.csproj", "{AE291CF3-4753-4454-9A7B-DE6137A76C4C}"
25-
EndProject
2620
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetToolkit.Repository.AdoNet", "src\DotNetToolkit.Repository.AdoNet\DotNetToolkit.Repository.AdoNet.csproj", "{77973BF2-E352-43C9-8CF2-99E01142B2A8}"
2721
EndProject
2822
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{257E837B-5B99-44D7-9647-1C2FE0A07520}"
2923
EndProject
3024
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetToolkit.Repository.Wpf.Demo", "samples\DotNetToolkit.Repository.Wpf.Demo\DotNetToolkit.Repository.Wpf.Demo.csproj", "{14409451-ED11-4DEF-8A89-783834F8316C}"
3125
EndProject
26+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetToolkit.Repository.Microsoft.DependencyInjection", "src\DotNetToolkit.Repository.Microsoft.DependencyInjection\DotNetToolkit.Repository.Microsoft.DependencyInjection.csproj", "{21EECEDF-7AD0-4456-87D0-ABA47AE3368C}"
27+
EndProject
28+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetToolkit.Repository.InMemory", "src\DotNetToolkit.Repository.InMemory\DotNetToolkit.Repository.InMemory.csproj", "{05705FCB-B361-4139-8C83-D4D5DF085A62}"
29+
EndProject
30+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{91D14746-3446-48E3-B01C-BF77B848738A}"
31+
EndProject
32+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetToolkit.Repository.Performance", "benchmarks\DotNetToolkit.Repository.Performance\DotNetToolkit.Repository.Performance.csproj", "{2700614E-A941-42C9-B86F-22D8A47690F3}"
33+
EndProject
3234
Global
3335
GlobalSection(SolutionConfigurationPlatforms) = preSolution
3436
Debug|Any CPU = Debug|Any CPU
@@ -55,25 +57,25 @@ Global
5557
{0A9D9AA4-F01C-470F-AD5B-5A81EA7A398D}.Debug|Any CPU.Build.0 = Debug|Any CPU
5658
{0A9D9AA4-F01C-470F-AD5B-5A81EA7A398D}.Release|Any CPU.ActiveCfg = Release|Any CPU
5759
{0A9D9AA4-F01C-470F-AD5B-5A81EA7A398D}.Release|Any CPU.Build.0 = Release|Any CPU
58-
{B71EA207-390A-4AB0-BFC8-44BA124FC35B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
59-
{B71EA207-390A-4AB0-BFC8-44BA124FC35B}.Debug|Any CPU.Build.0 = Debug|Any CPU
60-
{B71EA207-390A-4AB0-BFC8-44BA124FC35B}.Release|Any CPU.ActiveCfg = Release|Any CPU
61-
{B71EA207-390A-4AB0-BFC8-44BA124FC35B}.Release|Any CPU.Build.0 = Release|Any CPU
62-
{BB858B77-5CE8-4301-9FB6-343FFF5B7E63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
63-
{BB858B77-5CE8-4301-9FB6-343FFF5B7E63}.Debug|Any CPU.Build.0 = Debug|Any CPU
64-
{BB858B77-5CE8-4301-9FB6-343FFF5B7E63}.Release|Any CPU.ActiveCfg = Release|Any CPU
65-
{BB858B77-5CE8-4301-9FB6-343FFF5B7E63}.Release|Any CPU.Build.0 = Release|Any CPU
66-
{AE291CF3-4753-4454-9A7B-DE6137A76C4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
67-
{AE291CF3-4753-4454-9A7B-DE6137A76C4C}.Debug|Any CPU.Build.0 = Debug|Any CPU
68-
{AE291CF3-4753-4454-9A7B-DE6137A76C4C}.Release|Any CPU.ActiveCfg = Release|Any CPU
69-
{AE291CF3-4753-4454-9A7B-DE6137A76C4C}.Release|Any CPU.Build.0 = Release|Any CPU
7060
{77973BF2-E352-43C9-8CF2-99E01142B2A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
7161
{77973BF2-E352-43C9-8CF2-99E01142B2A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
7262
{77973BF2-E352-43C9-8CF2-99E01142B2A8}.Release|Any CPU.ActiveCfg = Release|Any CPU
7363
{77973BF2-E352-43C9-8CF2-99E01142B2A8}.Release|Any CPU.Build.0 = Release|Any CPU
7464
{14409451-ED11-4DEF-8A89-783834F8316C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
7565
{14409451-ED11-4DEF-8A89-783834F8316C}.Debug|Any CPU.Build.0 = Debug|Any CPU
7666
{14409451-ED11-4DEF-8A89-783834F8316C}.Release|Any CPU.ActiveCfg = Release|Any CPU
67+
{21EECEDF-7AD0-4456-87D0-ABA47AE3368C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
68+
{21EECEDF-7AD0-4456-87D0-ABA47AE3368C}.Debug|Any CPU.Build.0 = Debug|Any CPU
69+
{21EECEDF-7AD0-4456-87D0-ABA47AE3368C}.Release|Any CPU.ActiveCfg = Release|Any CPU
70+
{21EECEDF-7AD0-4456-87D0-ABA47AE3368C}.Release|Any CPU.Build.0 = Release|Any CPU
71+
{05705FCB-B361-4139-8C83-D4D5DF085A62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
72+
{05705FCB-B361-4139-8C83-D4D5DF085A62}.Debug|Any CPU.Build.0 = Debug|Any CPU
73+
{05705FCB-B361-4139-8C83-D4D5DF085A62}.Release|Any CPU.ActiveCfg = Release|Any CPU
74+
{05705FCB-B361-4139-8C83-D4D5DF085A62}.Release|Any CPU.Build.0 = Release|Any CPU
75+
{2700614E-A941-42C9-B86F-22D8A47690F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
76+
{2700614E-A941-42C9-B86F-22D8A47690F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
77+
{2700614E-A941-42C9-B86F-22D8A47690F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
78+
{2700614E-A941-42C9-B86F-22D8A47690F3}.Release|Any CPU.Build.0 = Release|Any CPU
7779
EndGlobalSection
7880
GlobalSection(SolutionProperties) = preSolution
7981
HideSolutionNode = FALSE
@@ -84,11 +86,11 @@ Global
8486
{8DBCF7DE-532D-45DF-A6B8-5D89415C5B77} = {DD273D5E-6D6C-41FA-A0C8-646CC53C4DC3}
8587
{2F99B66F-A347-4E8D-8ACA-5A34246A1FA6} = {DAB3DD1E-AD99-46C9-AC42-07E2F03D5A06}
8688
{0A9D9AA4-F01C-470F-AD5B-5A81EA7A398D} = {DD273D5E-6D6C-41FA-A0C8-646CC53C4DC3}
87-
{B71EA207-390A-4AB0-BFC8-44BA124FC35B} = {DD273D5E-6D6C-41FA-A0C8-646CC53C4DC3}
88-
{BB858B77-5CE8-4301-9FB6-343FFF5B7E63} = {DD273D5E-6D6C-41FA-A0C8-646CC53C4DC3}
89-
{AE291CF3-4753-4454-9A7B-DE6137A76C4C} = {DD273D5E-6D6C-41FA-A0C8-646CC53C4DC3}
9089
{77973BF2-E352-43C9-8CF2-99E01142B2A8} = {DD273D5E-6D6C-41FA-A0C8-646CC53C4DC3}
9190
{14409451-ED11-4DEF-8A89-783834F8316C} = {257E837B-5B99-44D7-9647-1C2FE0A07520}
91+
{21EECEDF-7AD0-4456-87D0-ABA47AE3368C} = {DD273D5E-6D6C-41FA-A0C8-646CC53C4DC3}
92+
{05705FCB-B361-4139-8C83-D4D5DF085A62} = {DD273D5E-6D6C-41FA-A0C8-646CC53C4DC3}
93+
{2700614E-A941-42C9-B86F-22D8A47690F3} = {91D14746-3446-48E3-B01C-BF77B848738A}
9294
EndGlobalSection
9395
GlobalSection(ExtensibilityGlobals) = postSolution
9496
SolutionGuid = {96973E0C-81D1-42DE-9F78-7103241B4E07}

README.md

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,32 @@
11
![alt text](https://raw.githubusercontent.com/johelvisguzman/DotNetToolkit.Repository/master/Toolkit.png)
22

3-
# DotNetToolkit.Repository
3+
# DotNetToolkit.Repository [![Build status](https://ci.appveyor.com/api/projects/status/v02h9efjwev30sof?svg=true)](https://ci.appveyor.com/project/johelvisguzman/dotnettoolkit-repository)
44
A toolkit for using Repository pattern in C# .NET
55

6-
[![Build status](https://ci.appveyor.com/api/projects/status/fh85yl9okcmblka6?svg=true)](https://ci.appveyor.com/project/johelvisguzman/dotnettoolkit-repository)
6+
**What is the Repository Pattern?**
7+
8+
An abstraction of the data layer and handling common data access functionality.
9+
10+
**How do I get started?**
11+
12+
If you want to use DotNetToolkit.Repository for the first time, the [Getting Started](https://github.com/johelvisguzman/DotNetToolkit.Repository/blob/dev/docs/getting-started.md) guide will help you.
13+
14+
**Packages**
15+
16+
| Package | NuGet Stable |
17+
| ------- | ------------- |
18+
[DotNetToolkit.Repository](https://www.nuget.org/packages/DotNetToolkit.Repository/) | [![DotNetToolkit.Repository](https://img.shields.io/nuget/v/DotNetToolkit.Repository.svg)](https://www.nuget.org/packages/DotNetToolkit.Repository/) |
19+
[DotNetToolkit.Repository.EntityFramework](https://www.nuget.org/packages/DotNetToolkit.Repository.EntityFramework/) | [![DotNetToolkit.Repository.EntityFramework](https://img.shields.io/nuget/v/DotNetToolkit.Repository.EntityFramework.svg)](https://www.nuget.org/packages/DotNetToolkit.Repository.EntityFramework/) |
20+
[DotNetToolkit.Repository.EntityFrameworkCore](https://www.nuget.org/packages/DotNetToolkit.Repository.EntityFrameworkCore/) | [![DotNetToolkit.Repository.EntityFrameworkCore](https://img.shields.io/nuget/v/DotNetToolkit.Repository.EntityFrameworkCore.svg)](https://www.nuget.org/packages/DotNetToolkit.Repository.EntityFrameworkCore/) |
21+
[DotNetToolkit.Repository.AdoNet](https://www.nuget.org/packages/DotNetToolkit.Repository.AdoNet/) | [![DotNetToolkit.Repository.AdoNet](https://img.shields.io/nuget/v/DotNetToolkit.Repository.AdoNet.svg)](https://www.nuget.org/packages/DotNetToolkit.Repository.AdoNet/) |
22+
[DotNetToolkit.Repository.InMemory](https://www.nuget.org/packages/DotNetToolkit.Repository.InMemory/) | [![DotNetToolkit.Repository.InMemory](https://img.shields.io/nuget/v/DotNetToolkit.Repository.InMemory.svg)](https://www.nuget.org/packages/DotNetToolkit.Repository.InMemory/) |
23+
[DotNetToolkit.Repository.Extensions.Microsoft.DependencyInjection](https://www.nuget.org/packages/DotNetToolkit.Repository.Extensions.Microsoft.DependencyInjection/) | [![DotNetToolkit.Repository.Extensions.Microsoft.DependencyInjection](https://img.shields.io/nuget/v/DotNetToolkit.Repository.Extensions.Microsoft.DependencyInjection.svg)](https://www.nuget.org/packages/DotNetToolkit.Repository.Extensions.Microsoft.DependencyInjection/) |
24+
25+
**Features**
26+
27+
The DotNetToolkit.Repository includes basic repository objects for handling the data access layer.
28+
The DotNetToolkit.Repository also supports Specifications, FetchStrategies, Services and Transactions (Unit Of Work).
29+
30+
**Performance**
31+
32+
Checkout the most current [DotNetToolkit.Repository.Performance](https://github.com/johelvisguzman/DotNetToolkit.Repository/blob/dev/docs/benchmarks.md) benchmark results!

appveyor.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,11 @@ build:
4545

4646
after_build:
4747
- dotnet pack .\src\DotNetToolkit.Repository\DotNetToolkit.Repository.csproj --configuration Release
48+
- dotnet pack .\src\DotNetToolkit.Repository.InMemory\DotNetToolkit.Repository.InMemory.csproj --configuration Release
4849
- dotnet pack .\src\DotNetToolkit.Repository.EntityFramework\DotNetToolkit.Repository.EntityFramework.csproj --configuration Release
4950
- dotnet pack .\src\DotNetToolkit.Repository.EntityFrameworkCore\DotNetToolkit.Repository.EntityFrameworkCore.csproj --configuration Release
50-
- dotnet pack .\src\DotNetToolkit.Repository.Json\DotNetToolkit.Repository.Json.csproj --configuration Release
51-
- dotnet pack .\src\DotNetToolkit.Repository.Xml\DotNetToolkit.Repository.Xml.csproj --configuration Release
52-
- dotnet pack .\src\DotNetToolkit.Repository.Csv\DotNetToolkit.Repository.Csv.csproj --configuration Release
5351
- dotnet pack .\src\DotNetToolkit.Repository.AdoNet\DotNetToolkit.Repository.AdoNet.csproj --configuration Release
52+
- dotnet pack .\src\DotNetToolkit.Repository.Microsoft.DependencyInjection\DotNetToolkit.Repository.Microsoft.DependencyInjection.csproj --configuration Release
5453

5554
#---------------------------------#
5655
# tests configuration #
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<configuration>
3+
<connectionStrings>
4+
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=tempdb;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
5+
</connectionStrings>
6+
</configuration>
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
namespace DotNetToolkit.Repository.Performance
2+
{
3+
using AdoNet;
4+
using BenchmarkDotNet.Attributes;
5+
using Configuration.Options;
6+
using Data;
7+
using EntityFramework;
8+
using EntityFrameworkCore;
9+
using InMemory;
10+
using Microsoft.EntityFrameworkCore;
11+
using System;
12+
using System.Collections.Generic;
13+
using System.Configuration;
14+
using System.Data.SqlClient;
15+
16+
public abstract class BenchmarkBase
17+
{
18+
private SqlConnection _connection;
19+
public static string ConnectionString { get; } = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
20+
21+
protected void BaseSetup()
22+
{
23+
_connection = new SqlConnection(ConnectionString);
24+
_connection.Open();
25+
}
26+
27+
protected RepositoryOptions BuildOptions(ContextProviderType provider)
28+
{
29+
switch (provider)
30+
{
31+
case ContextProviderType.InMemory:
32+
{
33+
return new RepositoryOptionsBuilder()
34+
.UseInMemoryDatabase(Guid.NewGuid().ToString())
35+
.Options;
36+
}
37+
case ContextProviderType.AdoNet:
38+
{
39+
return new RepositoryOptionsBuilder()
40+
.UseAdoNet(_connection)
41+
.Options;
42+
}
43+
case ContextProviderType.EntityFramework:
44+
{
45+
return new RepositoryOptionsBuilder()
46+
.UseEntityFramework<EfDbContext>(_connection)
47+
.Options;
48+
}
49+
case ContextProviderType.EntityFrameworkCore:
50+
{
51+
return new RepositoryOptionsBuilder()
52+
.UseEntityFrameworkCore<EfCoreDbContext>(x => x.UseSqlServer(ConnectionString))
53+
.Options;
54+
}
55+
default:
56+
throw new ArgumentOutOfRangeException(nameof(provider));
57+
}
58+
}
59+
60+
public virtual IEnumerable<ContextProviderType> Providers()
61+
{
62+
return new[]
63+
{
64+
ContextProviderType.InMemory,
65+
ContextProviderType.AdoNet,
66+
ContextProviderType.EntityFramework,
67+
ContextProviderType.EntityFrameworkCore
68+
};
69+
}
70+
71+
[ParamsSource(nameof(Providers))]
72+
public ContextProviderType Provider { get; set; }
73+
}
74+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
namespace DotNetToolkit.Repository.Performance
2+
{
3+
using BenchmarkDotNet.Columns;
4+
using BenchmarkDotNet.Configs;
5+
using BenchmarkDotNet.Diagnosers;
6+
using BenchmarkDotNet.Exporters;
7+
using BenchmarkDotNet.Exporters.Csv;
8+
using BenchmarkDotNet.Jobs;
9+
using BenchmarkDotNet.Loggers;
10+
using BenchmarkDotNet.Order;
11+
using BenchmarkDotNet.Toolchains.InProcess;
12+
using Data;
13+
14+
public class Config : ManualConfig
15+
{
16+
public Config()
17+
{
18+
Add(ConsoleLogger.Default);
19+
20+
Add(CsvExporter.Default);
21+
Add(MarkdownExporter.GitHub);
22+
Add(HtmlExporter.Default);
23+
24+
var md = new MemoryDiagnoser();
25+
26+
Add(md);
27+
Add(new ProviderColumn());
28+
Add(TargetMethodColumn.Method);
29+
Add(StatisticColumn.Mean);
30+
Add(BaselineRatioColumn.RatioMean);
31+
Add(RankColumn.Arabic);
32+
33+
Add(BenchmarkLogicalGroupRule.ByCategory);
34+
35+
Add(Job.Dry
36+
.WithLaunchCount(1)
37+
.WithWarmupCount(1)
38+
.WithIterationCount(1)
39+
.WithGcForce(true)
40+
.With(InProcessToolchain.Instance)
41+
);
42+
43+
Set(new DefaultOrderer(SummaryOrderPolicy.FastestToSlowest));
44+
45+
SummaryPerType = false;
46+
}
47+
}
48+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
namespace DotNetToolkit.Repository.Performance
2+
{
3+
using BenchmarkDotNet.Attributes;
4+
using Data;
5+
using System.Threading.Tasks;
6+
7+
[BenchmarkCategory("RepositoryTraits")]
8+
public class Repository_Add_Benchmarks : BenchmarkBase
9+
{
10+
private IRepository<Customer> _repo;
11+
private Customer _customer;
12+
13+
[IterationSetup]
14+
public void Setup()
15+
{
16+
BaseSetup();
17+
18+
_customer = new Customer { Name = "Random Name" };
19+
20+
_repo = new Repository<Customer>(BuildOptions(Provider));
21+
}
22+
23+
[IterationCleanup]
24+
public void Clean()
25+
{
26+
_repo.Delete(x => x.Id != 0);
27+
}
28+
29+
[BenchmarkCategory("Add"), Benchmark]
30+
public void Add()
31+
{
32+
_repo.Add(_customer);
33+
}
34+
35+
[BenchmarkCategory("Add"), Benchmark]
36+
public void AddRange()
37+
{
38+
_repo.Add(new[] { _customer });
39+
}
40+
41+
[BenchmarkCategory("AddAsync"), Benchmark]
42+
public async Task Async_Add()
43+
{
44+
await _repo.AddAsync(_customer);
45+
}
46+
47+
[BenchmarkCategory("AddAsync"), Benchmark]
48+
public async Task Async_AddRange()
49+
{
50+
await _repo.AddAsync(new[] { _customer });
51+
}
52+
}
53+
}

0 commit comments

Comments
 (0)