Skip to content

Commit

Permalink
Release 0.22.0
Browse files Browse the repository at this point in the history
  • Loading branch information
tmm360 committed Nov 19, 2020
2 parents d77797d + ba802db commit 38ea2c8
Show file tree
Hide file tree
Showing 216 changed files with 44,345 additions and 1,986 deletions.
30 changes: 10 additions & 20 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -1,28 +1,18 @@
# Remove the line below if you want to inherit .editorconfig settings from higher directories
root = true

# C# files
[*.cs]

#### Suppress warnings ####

# CA1034: Nested types should not be visible
dotnet_diagnostic.CA1034.severity = none
#### Define style ####

# CA1063: Implement IDisposable Correctly
dotnet_diagnostic.CA1063.severity = none
# All files
[*]
indent_style = space

# CA1303: Do not pass literals as localized parameters
dotnet_diagnostic.CA1303.severity = none # Don't need translated exceptions
# C# Project files
[*.csproj]
indent_size = 2

# CA1707: Identifiers should not contain underscores
dotnet_diagnostic.CA1707.severity = none # I want to use underscore in constants

# CA1812: Avoid uninstantiated internal classes
dotnet_diagnostic.CA1812.severity = none # Doing extensive use of dependency injection
#### Suppress warnings ####

# CA1816: Dispose methods should call SuppressFinalize
dotnet_diagnostic.CA1816.severity = none
# C# files
[*.cs]

# CA2225: Operator overloads have named alternates
dotnet_diagnostic.CA2225.severity = none
14 changes: 12 additions & 2 deletions .github/workflows/myget-unstable-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,21 @@ jobs:
with:
fetch-depth: 0

- name: Setup .NET Core SDK
uses: actions/setup-dotnet@master
- name: Setup .NET Core SDK 2.1.x
uses: actions/setup-dotnet@v1
with:
dotnet-version: '2.1.x'

- name: Setup .NET Core SDK 3.1.x
uses: actions/setup-dotnet@v1
with:
dotnet-version: '3.1.x'

- name: Setup .NET SDK 5.0.x
uses: actions/setup-dotnet@v1
with:
dotnet-version: '5.0.x'

- name: Build with dotnet
run: dotnet build --configuration Release

Expand Down
14 changes: 12 additions & 2 deletions .github/workflows/nuget-stable-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,22 @@ jobs:
- uses: actions/checkout@master
with:
fetch-depth: 0

- name: Setup .NET Core SDK 2.1.x
uses: actions/setup-dotnet@v1
with:
dotnet-version: '2.1.x'

- name: Setup .NET Core SDK
uses: actions/setup-dotnet@master
- name: Setup .NET Core SDK 3.1.x
uses: actions/setup-dotnet@v1
with:
dotnet-version: '3.1.x'

- name: Setup .NET SDK 5.0.x
uses: actions/setup-dotnet@v1
with:
dotnet-version: '5.0.x'

- name: Build with dotnet
run: dotnet build --configuration Release

Expand Down
File renamed without changes.
25 changes: 24 additions & 1 deletion MongODM.sln
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
.gitignore = .gitignore
LICENSE.txt = LICENSE.txt
LICENSE = LICENSE
MongODM.sln.licenseheader = MongODM.sln.licenseheader
README.md = README.md
EndProjectSection
Expand All @@ -34,6 +34,14 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{
.github\workflows\nuget-stable-deploy.yml = .github\workflows\nuget-stable-deploy.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{00FD3F85-6217-4947-9D26-7B2E9A8920CF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AspNetCoreSample", "samples\AspNetCoreSample\AspNetCoreSample.csproj", "{0FB9D89F-DC0B-4738-89E5-AE65C555B406}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MongODM", "src\MongODM\MongODM.csproj", "{0C53354C-B5F3-438A-A5EA-26C6F7E92E38}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MongODM.AspNetCore.UI", "src\MongODM.AspNetCore.UI\MongODM.AspNetCore.UI.csproj", "{A1821261-1FEE-430E-84CC-8D88867D4011}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -64,6 +72,18 @@ Global
{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
{0FB9D89F-DC0B-4738-89E5-AE65C555B406}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0FB9D89F-DC0B-4738-89E5-AE65C555B406}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0FB9D89F-DC0B-4738-89E5-AE65C555B406}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0FB9D89F-DC0B-4738-89E5-AE65C555B406}.Release|Any CPU.Build.0 = Release|Any CPU
{0C53354C-B5F3-438A-A5EA-26C6F7E92E38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0C53354C-B5F3-438A-A5EA-26C6F7E92E38}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0C53354C-B5F3-438A-A5EA-26C6F7E92E38}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0C53354C-B5F3-438A-A5EA-26C6F7E92E38}.Release|Any CPU.Build.0 = Release|Any CPU
{A1821261-1FEE-430E-84CC-8D88867D4011}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A1821261-1FEE-430E-84CC-8D88867D4011}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A1821261-1FEE-430E-84CC-8D88867D4011}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A1821261-1FEE-430E-84CC-8D88867D4011}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -76,6 +96,9 @@ Global
{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}
{0FB9D89F-DC0B-4738-89E5-AE65C555B406} = {00FD3F85-6217-4947-9D26-7B2E9A8920CF}
{0C53354C-B5F3-438A-A5EA-26C6F7E92E38} = {490DAED7-DAD8-459A-A20E-F57F2F6F619E}
{A1821261-1FEE-430E-84CC-8D88867D4011} = {490DAED7-DAD8-459A-A20E-F57F2F6F619E}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {43A8089E-9445-4DE1-B509-F049E211B555}
Expand Down
38 changes: 20 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,34 @@

## Overview

MongODM is a **ODM framework** (Object-Documental Mapping) developed for work with **MongoDB** and **Asp.NET** applications.
MongODM is a **ODM framework** (Object-Documental Mapper) developed for work with **MongoDB** and **Asp.NET Core** applications.

With MongODM you can concentrate on developing your application, without worring on how data is organized in documents. **Documental databases are very efficient**, but very often using them we have to concern about **how data is structured** at the application layer. MongODM creates a document-to-object mapping layer, solving this kind of problems.
With MongODM you can concentrate on developing your application, without worrying on how data is organized in documents. **Documental databases are very efficient**, but often using them we have also to concern about **how data is structured** at the application layer. MongODM creates a document-to-object mapping layer, solving this kind of problems.

Infact, the real powerful and different vision of documental DBs against SQL DBs resides into **data denormalization**. With denormalization we can optimize data structure for get all required information with a single document read, without join, but price of this efficiency is often paid with a more difficult to develop application layer. Indeed, often writing applications with documental DBs we can encounter these kind of issues:
The real powerful and different vision of documental DBs against SQL DBs resides into **data denormalization**. With denormalization we can optimize data structure for get all required information with a single document read, without join, but price of this efficiency is often paid with a more difficult to develop application layer. Indeed, often writing applications with documental DBs we can encounter these kind of issues:

- Related models are connected on our application domain, but different models are saved on different documents. Logical join operations have so to be performed on application layer instead of db layer using different queries
- Denormalization can optimize reading operations, but if requirements evolve, we could have to update the schema of all saved documents. Or even worse, we could have to decorate our application with explicit checks and conditions on data loaded
- To update a document is easy, but to update a document that has been denormalized into others can be really painful. We have to trace where denormalization has gone, and update every dependent document
- Related models are composed with application domain, but different models are saved into different documents. Logical join operations are so performed on application layer, instead of db layer, using different queries on db
- Denormalization can optimize these reading operations, but when application requirements evolve, we can have to update the schema of all saved documents. Or even worse, we could have to decorate our application with explicit checks and conditions on loaded data
- Update a document is easy, but update a document that has been denormalized into others can be really painful. We have to trace where denormalization has gone, and update every dependent document

For these reasons SQL databases are often still prefered to documentals, because data management from an application perspective is easier, even if documental can be more efficient. Or often documental DBs are used as a simple CRUD storage layer, where save only plain data without make any use of denormalization advantages.
For these reasons SQL databases are often still prefered to documentals, because data management with complex domains is easier, even if documental can be more efficient. Instead often documental DBs are used as a simple CRUD storage layer, for save only plain data without make any use of denormalization advantages.

**MongODM has the scope to solve these problems**, and its objective is to **bring efficiency of denormalized documental data also to complex applications**, without have to worry at all of how data is organized from an application layer!
**MongODM has the scope to solve these problems**, and its scope is to **bring efficiency of denormalized documental data also to complex application domains**, without have to worry at all of how data is organized from an application layer!

Moreover, MongODM uses official [MongoDB's drivers for C#](https://github.com/mongodb/mongo-csharp-driver), thus inheriting all the powerful features developed for example about description of data serialization, and keeping compatibility with any new relase of MongoDB Server or MongoDB Atlas.
Moreover, **MongODM uses official [MongoDB's drivers for C#](https://github.com/mongodb/mongo-csharp-driver)**, thus inheriting all the powerful features developed by MongoDB's team, for example descripting data serialization, and keeping compatibility with any new relase of MongoDB Server or MongoDB Atlas.

Here is a non exhaustive list of implemented features from MongODM:
Here is a non exhaustive list of implemented features by MongODM:

- Create relation between documents, and fine configuration of serialized properties for document denormalization
- Transparent lazy loading for unloaded properties
- Manage repositories grouped in database contexts
- Automatic denormalization dependent documents update
- Work with asynchronous database maintenance tasks based on [Hangfire](https://www.hangfire.io/), or on your independent system
- Create relation between documents, and fine configuration of serialized properties with document denormalization
- Transparent lazy loading of unloaded properties on related documents
- Manage repositories with database contexts
- Automatic denormalized documents update
- Execute database maintenance tasks with asynchronous task manager [Hangfire](https://www.hangfire.io/) by default, or with your custom one
- Customizable database indexes
- Handle different versioned document schemas on same collections
- Configurable data migration between document versions
- Handle different versioned document schemas with same database collection
- Configurable data migration scripts between document schemas
- Oriented to Dependency Injection for improve code testability
- Native integration with Asp.NET Core
- Native integration with Asp.NET Core and Hangfire

**Disclaimer**: MongODM is still in a pre-beta phase, new features are going to be implemented, and current interface is still susceptible to heavy changes. At this stage active use in production is discouraged.

Expand All @@ -46,6 +46,8 @@ Documentation

For specific documentation on how to install and use MongODM, visit our [Wiki](https://github.com/Etherna/mongodm/wiki).

Graphic documentation is maintained with https://www.diagrams.net/ software.

Issue reports
-------------

Expand Down
Loading

0 comments on commit 38ea2c8

Please sign in to comment.