eQuantic.Core.Data.EntityFramework.MongoDb 10.2.0

dotnet add package eQuantic.Core.Data.EntityFramework.MongoDb --version 10.2.0
                    
NuGet\Install-Package eQuantic.Core.Data.EntityFramework.MongoDb -Version 10.2.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="eQuantic.Core.Data.EntityFramework.MongoDb" Version="10.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="eQuantic.Core.Data.EntityFramework.MongoDb" Version="10.2.0" />
                    
Directory.Packages.props
<PackageReference Include="eQuantic.Core.Data.EntityFramework.MongoDb" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add eQuantic.Core.Data.EntityFramework.MongoDb --version 10.2.0
                    
#r "nuget: eQuantic.Core.Data.EntityFramework.MongoDb, 10.2.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package eQuantic.Core.Data.EntityFramework.MongoDb@10.2.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=eQuantic.Core.Data.EntityFramework.MongoDb&version=10.2.0
                    
Install as a Cake Addin
#tool nuget:?package=eQuantic.Core.Data.EntityFramework.MongoDb&version=10.2.0
                    
Install as a Cake Tool

eQuantic.Core.Data.EntityFramework

The Entity Framework Core implementation of eQuantic.Core.Data. You code against the provider-agnostic IRepository<TEntity, TKey> / IUnitOfWork contracts; this package supplies the EF Core engine for SQL Server, PostgreSQL, MySQL, MongoDB and Azure Cosmos DB.

// A repository over any IEntity<TKey>, obtained from your DbContext-backed unit of work:
var repo = unitOfWork.GetAsyncRepository<OrderData, Guid>();

// Query typed and fluent — one QueryOptions, no magic strings:
var page = await repo.GetPagedAsync(
    PageRequest.Of(pageIndex: 1, pageSize: 20),
    new QueryOptions<OrderData>()
        .Where(o => o.Total, FilterOperator.GreaterThan, 100m)
        .And(o => o.Customer.Name, FilterOperator.Contains, term)
        .OrderByDescending(o => o.CreatedAt)
        .Include(nameof(OrderData.Customer))
        .NoTracking());

// page is a PagedResult<OrderData>: Items + TotalCount + PageIndex/PageSize/PageCount + Has*Page

Why

The Repository pattern keeps your domain ignorant of the persistence engine — you code against IRepository<TEntity, TKey> and can swap SQL Server for PostgreSQL, MongoDB or Cosmos DB without touching a line of domain code. What usually rots is the query surface: a sprawl of GetPaged/GetFiltered overloads and Action<Configuration> callbacks, with filters passed as magic strings.

On the eQuantic.Core.Data v5 contracts, this provider collapses that into one QueryOptions<TEntity> per read — authored typed and fluent, checked at compile time, and translated to EF Core server-side.

Getting started

Install the provider for your database — pick the major that matches your runtime (see Versioning below):

dotnet add package eQuantic.Core.Data.EntityFramework.SqlServer --version 8.*

Give your entities a key via IEntity<TKey>, keep your usual DbContext, and derive the provider's unit of work:

using eQuantic.Core.Data.Repository;
using eQuantic.Core.Data.EntityFramework.SqlServer.Repository;
using Microsoft.EntityFrameworkCore;

public class OrderData : IEntity<Guid>
{
    public Guid Id { get; set; }
    public decimal Total { get; set; }
    public Guid GetKey() => Id;
    public void SetKey(Guid key) => Id = key;
}

public class AppDbContext(DbContextOptions<AppDbContext> options) : DbContext(options)
{
    public DbSet<OrderData> Orders => Set<OrderData>();
}

public interface IAppUnitOfWork : IQueryableUnitOfWork { }

public class AppUnitOfWork(IServiceProvider sp, AppDbContext ctx)
    : UnitOfWork<AppDbContext>(sp, ctx), IAppUnitOfWork;

Register the context and repositories — AddRelationalRepositories for the SQL providers, AddQueryableRepositories for the document providers (MongoDB, Cosmos DB):

services.AddDbContext<AppDbContext>(o => o.UseSqlServer(connectionString));
services.AddRelationalRepositories<IAppUnitOfWork, AppUnitOfWork>();

Then inject IAppUnitOfWork, ask it for a repository, and query with a QueryOptions (the snippet above). The full slice — specifications, custom repositories, a domain service — is in the walkthrough.

Swap the suffix (PostgreSql, MySql, MongoDb, CosmosDb) and the UseXxx call to target another database.

What this package gives you

eQuantic.Core.Data defines the contractsIRepository, IUnitOfWork, QueryOptions, PageRequest, PagedResult, specifications — with the persistence engine kept out of the type signatures (IRepository<TEntity, TKey>, not IRepository<TUnitOfWork, TEntity, TKey>).

This package is the Entity Framework Core implementation of those contracts. It translates a single QueryOptions<TEntity> into an EF IQueryable — applying, in order, custom before hooks, the specification and predicate filter, eager Includes, sortings (server-side / EF-translatable), AsNoTracking, IgnoreQueryFilters, query tags and custom after hooks — and returns PagedResult<T> from paged reads. The relational providers also carry a parameterized raw-SQL executor (functions and stored procedures, always via DbParameter).

How you query

QueryOptions<TEntity> mirrors the eQuantic.Linq query builders, so filters read like code and fail at compile time — not at runtime:

new QueryOptions<OrderData>()
    .Where(o => o.Total, FilterOperator.GreaterThanOrEqual, 100m)   // typed member selector
    .And(o => o.Status, FilterOperator.Equal, OrderStatus.Paid)     // clauses fold left to right:
    .Or(o => o.Customer.IsVip, FilterOperator.Equal, true)          //   (total>=100 AND paid) OR vip
    .OrderByDescending(o => o.CreatedAt)
    .ThenBy("customer.name")                                        // string path for dynamic columns
    .Include(nameof(OrderData.Customer))
    .NoTracking();

You reach for whichever filter form fits — member selector, string path, ISpecification<T>, Expression<Func<T,bool>>, a serialized ExpressionModel<T>, or an eQuantic.Linq.Web query string — all end up as one predicate the provider translates. The full query-string grammar is documented in the eQuantic.Linq reference.

Providers

Package Database
eQuantic.Core.Data.EntityFramework.SqlServer SQL Server
eQuantic.Core.Data.EntityFramework.PostgreSql PostgreSQL
eQuantic.Core.Data.EntityFramework.MySql MySQL (Pomelo)
eQuantic.Core.Data.EntityFramework.MongoDb MongoDB (EF Core provider)
eQuantic.Core.Data.EntityFramework.CosmosDb Azure Cosmos DB (EF Core provider)

The three relational providers share eQuantic.Core.Data.EntityFramework.Relational; the document providers (MongoDb, CosmosDb) are non-relational and build directly on the base eQuantic.Core.Data.EntityFramework. Register your DbContext-backed unit of work and the open-generic repositories through AddRelationalRepositories<TUnitOfWorkInterface, TUnitOfWorkImpl>() (relational) or the base AddQueryableRepositories<TUnitOfWork>() (document) — the full wiring is in the walkthrough.

Azure Cosmos DB: scope a read to one logical partition with the Cosmos-specific WithPartitionKey extension so it doesn't fan out into a cross-partition scan:

new QueryOptions<OrderData>()
    .WithPartitionKey(tenantId)
    .Where(o => o.Status, FilterOperator.Equal, OrderStatus.Paid);

Cosmos has no server-side set-based delete/update (ExecuteDelete/ExecuteUpdate are relational-only), so DeleteMany/UpdateMany load the matching documents and modify them through the context.

Versioning

Pick the package major that matches your runtime — this library targets .NET 8 and .NET 10, and each runtime is published as its own package major so the EF Core lines never mix:

Your app Install Targets
.NET 8 8.x (e.g. 8.2.0) net8.0, EF Core 8
.NET 10 10.x (e.g. 10.1.0) net10.0, EF Core 10

The shared multi-framework assemblies (the referenceable base eQuantic.Core.Data.EntityFramework and eQuantic.Core.Data.EntityFramework.Relational) stay in the 4.x line on purpose — a neutral lane that must not be read as a .NET version. You normally consume only the provider package for your runtime (8.x / 10.x), which pulls the right shared assemblies transitively.

Learn more

MIT © eQuantic Tech

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on eQuantic.Core.Data.EntityFramework.MongoDb:

Package Downloads
eQuantic.Core.Persistence.MongoDb

eQuantic Persistence with MongoDB Library

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
10.2.0 27 7/20/2026
10.1.0 30 7/20/2026
10.0.2 199 3/2/2026
10.0.1 116 3/2/2026
10.0.0 131 2/17/2026
9.1.2 157 3/2/2026
9.1.1 113 3/2/2026
9.1.0 116 2/17/2026
9.0.1 316 6/17/2025
9.0.0 224 4/19/2025
8.3.0 27 7/20/2026
8.2.0 30 7/20/2026
8.1.2 166 3/2/2026
8.1.1 119 3/2/2026
8.1.0 124 2/17/2026
8.0.12 318 6/17/2025
8.0.11 254 4/19/2025
8.0.10 245 2/27/2025
8.0.9 340 2/17/2025
8.0.8 602 1/8/2025
Loading failed

Entity ignorant persistance with Repository Pattern for Entity
           Framework