ItMastersPro.MongoDb.Repository
1.2.2
See the version list below for details.
dotnet add package ItMastersPro.MongoDb.Repository --version 1.2.2
NuGet\Install-Package ItMastersPro.MongoDb.Repository -Version 1.2.2
<PackageReference Include="ItMastersPro.MongoDb.Repository" Version="1.2.2" />
paket add ItMastersPro.MongoDb.Repository --version 1.2.2
#r "nuget: ItMastersPro.MongoDb.Repository, 1.2.2"
// Install ItMastersPro.MongoDb.Repository as a Cake Addin #addin nuget:?package=ItMastersPro.MongoDb.Repository&version=1.2.2 // Install ItMastersPro.MongoDb.Repository as a Cake Tool #tool nuget:?package=ItMastersPro.MongoDb.Repository&version=1.2.2
ItMastersPro.MongoDb.Repository
Implementation the Repository and Unit-of-Work patterns for use MongoDb on .Net Core
Getting Started
Use package is very simple:
Step 1:
Import the package, using the command
Install-Package ItMastersPro.MongoDb.Repository
Step 2:
You need to create an appetting.json file in every test project and specify the parameters of the connection string to MongoDB database.
{
"MongoConnection": {
"ConnectionString": "mongodb://username:password@host:port/<DatabaseName>?ssl=true"
}
}
Step 3:
Add service to the container
services.UseMongoDb(Configuration.GetSection("MongoConnection:ConnectionString").Value);
Step 4:
Inherit the class from the interface csharp IEntity
. The rest of the package will do all logic for you.
public class Post : IEntity
{
public DateTime Date { get; set; }
public string Author { get; set; }
...
}
Step 5:
Implement the interface in the controller
private readonly IMongoDbContext _mongoDbContext;
private readonly IRepository<Post> _postRepository;
public HomeController(IRepository<Post> postRepository, IMongoDbContext mongoDbContext)
{
_mongoDbContext = mongoDbContext;
_postRepository = postRepository;
}
Alternate path for implement the interface shown in DependencyInjectionUnitTests.cs.
Step 6:
It's all. Now you can access the methods via the interface variable, like this
_postRepository.Insert(new Post() {Author = "Author", Date = DateTime.Now});
Filter generator:
If you need to create a search query from a data model with many fields, you can use the FilterGenerator class. You must define filters for each of the fields.
public class TestFilter : FilterGenerator<Entity, SearchRequest>
{
private readonly SearchRequest _data;
public TestFilter(SearchRequest data) : base(data)
{
_data = data;
}
private FilterDefinition<Entity> StringsTestFieldFilter()
{
return Builders<Entity>.Filter.Where(x => x.StringsTestField == _data.StringsTestField);
}
private FilterDefinition<Entity> IntTestFieldFilter()
{
return Builders<Entity>.Filter.Where(x => x.IntTestField == _data.IntTestField);
}
}
You can also create a method in which you define a filter consisting of several fields joined by some kind of logic.
public class CompositeFilter : FilterGenerator<Entity, SearchRequest>
{
private readonly SearchRequest _data;
public CompositeFilter(SearchRequest data) : base(data)
{
_data = data;
}
private FilterDefinition<Entity> CompositeFieldFilter()
{
return Builders<Entity>.Filter.Where(x => x.StringsTestField == _data.StringsTestField && x.IntTestField != _data.IntTestField);
}
}
Next, you must merge the filters for individual fields using the AND or OR operators or list of filters by calling the appropriate method.
var andFilter = new TestFilter(data).AndCondition();
var orFilter = new TestFilter(data).OrCondition();
var listFilter = new TestFilter(data).GetFiltersList();
To get the list of entities from the collection, you can use a method where the received filter should be passed as a parameter.
var filtredList = _postRepository.Query(andFilter);
For more information, see the test projects.
Addition
At the moment the library implements simple methods: Insert, Updage, Delete, Find (search one record), Query (search multiple record). We tried to make the code intuitive, in addition, we supplemented it with an annotation. You can also see unit tests as an example. Detailed documentation find here.
Running the tests
To run the tests correctly, you need to create an appetting.json file in every test project. You must also specify the parameters of the connection string to MongoDB database.
{
"MongoConnection": {
"ConnectionString": "mongodb://username:password@host:port/<DatabaseName>?ssl=true"
}
}
If you have problems while integration tests execute
Sometimes integration tests may fail to perform. This is due to the fact that the IDE runs them in parallel in different threads. Therefore, if this happens, run tests that have not been tested separately.
Contributing
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.
Versioning
We use SemVer for versioning. For the versions available, see the repository of packages.
Authors
- Konstantin Anisimoff - Initial work - ItMasters.Pro
See also the list of contributors who participated in this project.
License
This project is licensed under the MIT License - see the LICENSE.md file for details
Acknowledgments
- Happy nice code!
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Extensions.DependencyInjection (>= 2.0.0)
- MongoDB.Driver (>= 2.5.0)
- PluralizeService.Core (>= 1.0.0.5)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.