diff --git a/.github/workflows/build-test-package.yml b/.github/workflows/build-test-package.yml
new file mode 100644
index 00000000..55bab03c
--- /dev/null
+++ b/.github/workflows/build-test-package.yml
@@ -0,0 +1,31 @@
+name: Build test and package .Net Core library - MongODM
+
+on:
+ push:
+ branches: [ master, dev ]
+
+jobs:
+ build-test-package:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@master
+ with:
+ fetch-depth: 0
+
+ - name: Setup .NET Core SDK
+ uses: actions/setup-dotnet@master
+ with:
+ dotnet-version: '3.1.x'
+
+ - name: Build with dotnet
+ run: dotnet build --configuration Release
+
+ - name: Run unit tests
+ run: dotnet test --configuration Release
+
+ - name: Generate nuget package
+ run: dotnet pack --configuration Release -o nupkg
+
+ - name: Push packages
+ run: dotnet nuget push './nupkg/*.nupkg' --api-key ${{secrets.MYGET_APIKEY}} --source https://www.myget.org/F/etherna/api/v3/index.json
diff --git a/MongODM.sln b/MongODM.sln
new file mode 100644
index 00000000..7fa3b3a5
--- /dev/null
+++ b/MongODM.sln
@@ -0,0 +1,78 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.28803.156
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{490DAED7-DAD8-459A-A20E-F57F2F6F619E}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{CF1ABDEA-794F-4474-858D-BCB61F367D72}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MongODM.Hangfire", "src\MongODM.Hangfire\MongODM.Hangfire.csproj", "{10897D0D-4898-4A4D-8D1E-B2435E93D9A1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExecutionContext", "src\ExecutionContext\ExecutionContext.csproj", "{DB6C020D-1C93-4456-8FB5-EF7CF505DF7B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExecutionContext.Tests", "test\ExecutionContext.Tests\ExecutionContext.Tests.csproj", "{BF4F963A-DBCE-4C53-A209-502F4CAF12C5}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MongODM.AspNetCore", "src\MongODM.AspNetCore\MongODM.AspNetCore.csproj", "{6374F645-5D17-494E-9529-7F83426900B3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MongODM.Core", "src\MongODM.Core\MongODM.Core.csproj", "{4F2498A9-D60D-4D49-95B9-BC78EE2917B5}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MongODM.Core.Tests", "test\MongODM.Core.Tests\MongODM.Core.Tests.csproj", "{50D6BEE5-54B5-43F3-BA92-6107AB6E311E}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{03C64D98-FF9F-4760-AE82-203953FF4940}"
+ ProjectSection(SolutionItems) = preProject
+ .gitignore = .gitignore
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{D4BB5972-5F7B-43ED-81C1-69ECF0E62D1E}"
+ ProjectSection(SolutionItems) = preProject
+ .github\workflows\build-test-package.yml = .github\workflows\build-test-package.yml
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {10897D0D-4898-4A4D-8D1E-B2435E93D9A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {10897D0D-4898-4A4D-8D1E-B2435E93D9A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {10897D0D-4898-4A4D-8D1E-B2435E93D9A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {10897D0D-4898-4A4D-8D1E-B2435E93D9A1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DB6C020D-1C93-4456-8FB5-EF7CF505DF7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DB6C020D-1C93-4456-8FB5-EF7CF505DF7B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DB6C020D-1C93-4456-8FB5-EF7CF505DF7B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DB6C020D-1C93-4456-8FB5-EF7CF505DF7B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BF4F963A-DBCE-4C53-A209-502F4CAF12C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BF4F963A-DBCE-4C53-A209-502F4CAF12C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BF4F963A-DBCE-4C53-A209-502F4CAF12C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BF4F963A-DBCE-4C53-A209-502F4CAF12C5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6374F645-5D17-494E-9529-7F83426900B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6374F645-5D17-494E-9529-7F83426900B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6374F645-5D17-494E-9529-7F83426900B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6374F645-5D17-494E-9529-7F83426900B3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4F2498A9-D60D-4D49-95B9-BC78EE2917B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4F2498A9-D60D-4D49-95B9-BC78EE2917B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4F2498A9-D60D-4D49-95B9-BC78EE2917B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4F2498A9-D60D-4D49-95B9-BC78EE2917B5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {50D6BEE5-54B5-43F3-BA92-6107AB6E311E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {50D6BEE5-54B5-43F3-BA92-6107AB6E311E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {50D6BEE5-54B5-43F3-BA92-6107AB6E311E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {50D6BEE5-54B5-43F3-BA92-6107AB6E311E}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {10897D0D-4898-4A4D-8D1E-B2435E93D9A1} = {490DAED7-DAD8-459A-A20E-F57F2F6F619E}
+ {DB6C020D-1C93-4456-8FB5-EF7CF505DF7B} = {490DAED7-DAD8-459A-A20E-F57F2F6F619E}
+ {BF4F963A-DBCE-4C53-A209-502F4CAF12C5} = {CF1ABDEA-794F-4474-858D-BCB61F367D72}
+ {6374F645-5D17-494E-9529-7F83426900B3} = {490DAED7-DAD8-459A-A20E-F57F2F6F619E}
+ {4F2498A9-D60D-4D49-95B9-BC78EE2917B5} = {490DAED7-DAD8-459A-A20E-F57F2F6F619E}
+ {50D6BEE5-54B5-43F3-BA92-6107AB6E311E} = {CF1ABDEA-794F-4474-858D-BCB61F367D72}
+ {D4BB5972-5F7B-43ED-81C1-69ECF0E62D1E} = {03C64D98-FF9F-4760-AE82-203953FF4940}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {43A8089E-9445-4DE1-B509-F049E211B555}
+ EndGlobalSection
+EndGlobal
diff --git a/MongoDM.sln b/MongoDM.sln
deleted file mode 100644
index cbf778ca..00000000
--- a/MongoDM.sln
+++ /dev/null
@@ -1,39 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.28803.156
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{490DAED7-DAD8-459A-A20E-F57F2F6F619E}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{CF1ABDEA-794F-4474-858D-BCB61F367D72}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MongoDM", "src\MongoDM\MongoDM.csproj", "{AA9CE7D3-169F-4725-970E-4CE900E91EDD}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MongoDM.Tests", "test\MongoDM.Tests\MongoDM.Tests.csproj", "{82789357-2EC1-4159-B3F6-0F830ABAFF4C}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {AA9CE7D3-169F-4725-970E-4CE900E91EDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {AA9CE7D3-169F-4725-970E-4CE900E91EDD}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {AA9CE7D3-169F-4725-970E-4CE900E91EDD}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {AA9CE7D3-169F-4725-970E-4CE900E91EDD}.Release|Any CPU.Build.0 = Release|Any CPU
- {82789357-2EC1-4159-B3F6-0F830ABAFF4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {82789357-2EC1-4159-B3F6-0F830ABAFF4C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {82789357-2EC1-4159-B3F6-0F830ABAFF4C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {82789357-2EC1-4159-B3F6-0F830ABAFF4C}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {AA9CE7D3-169F-4725-970E-4CE900E91EDD} = {490DAED7-DAD8-459A-A20E-F57F2F6F619E}
- {82789357-2EC1-4159-B3F6-0F830ABAFF4C} = {CF1ABDEA-794F-4474-858D-BCB61F367D72}
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {43A8089E-9445-4DE1-B509-F049E211B555}
- EndGlobalSection
-EndGlobal
diff --git a/doc/DbContextClassDiagram.drawio b/doc/DbContextClassDiagram.drawio
new file mode 100644
index 00000000..3828422c
--- /dev/null
+++ b/doc/DbContextClassDiagram.drawio
@@ -0,0 +1 @@
+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
\ No newline at end of file
diff --git a/src/ExecutionContext/AsyncLocal/AsyncLocalContext.cs b/src/ExecutionContext/AsyncLocal/AsyncLocalContext.cs
new file mode 100644
index 00000000..9f58fbb9
--- /dev/null
+++ b/src/ExecutionContext/AsyncLocal/AsyncLocalContext.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+
+namespace Etherna.ExecContext.AsyncLocal
+{
+ ///
+ /// Async local context implementation. This can be used as singleton or with multiple instances.
+ /// The container permits to have an Item instance inside this
+ /// method calling tree.
+ ///
+ ///
+ /// Before try to use an async local context, call the method
+ /// for initialize the container, and receive a context handler.
+ /// After have used, dispose the handler for destroy the current context dictionary.
+ ///
+ public class AsyncLocalContext : IAsyncLocalContext, IHandledAsyncLocalContext
+ {
+ // Fields.
+ private static readonly AsyncLocal?> asyncLocalContext = new AsyncLocal?>();
+
+ // Properties.
+ public IDictionary