eQuantic.Core.Data
5.1.0
See the version list below for details.
dotnet add package eQuantic.Core.Data --version 5.1.0
NuGet\Install-Package eQuantic.Core.Data -Version 5.1.0
<PackageReference Include="eQuantic.Core.Data" Version="5.1.0" />
<PackageVersion Include="eQuantic.Core.Data" Version="5.1.0" />
<PackageReference Include="eQuantic.Core.Data" />
paket add eQuantic.Core.Data --version 5.1.0
#r "nuget: eQuantic.Core.Data, 5.1.0"
#:package eQuantic.Core.Data@5.1.0
#addin nuget:?package=eQuantic.Core.Data&version=5.1.0
#tool nuget:?package=eQuantic.Core.Data&version=5.1.0
eQuantic.Core.Data
A provider-agnostic Repository + Unit of Work for .NET, where filtering, sorting and paging are authored typed and fluent — not as stringly-typed configuration.
var repo = unitOfWork.GetAsyncRepository<OrderData, Guid>();
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 the Entity Framework (or other) provider supplies the
implementation. What usually rots is the query surface: dozens of GetPaged/GetFiltered
overloads and Action<Configuration> callbacks, with filters and sorts passed as magic strings.
eQuantic.Core.Data v5 collapses that: one method per operation, each taking a single
QueryOptions<TEntity> that you compose fluently and typed, backed by the
eQuantic.Linq query engine.
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
You reach for whichever filter form fits — all end up as one predicate the provider translates:
| Form | When |
|---|---|
Where(selector, op, value) / And / Or |
Primary — typed, fluent, compile-checked. |
Where(string path, op, value) |
Dynamic column names; operator and value stay typed. |
Where(ISpecification<T>) |
A reusable domain rule (specification pattern). |
Where(Expression<Func<T, bool>>) |
An arbitrary predicate you already hold. |
Where(ExpressionModel<T>) |
A serialized filter — built in code or received over the wire. |
Where("total:gt(100)") |
The boundary where a filter arrives as a query string (e.g. a filterBy parameter). Prefer the typed form in code. |
The query-string grammar behind the string forms (total:gt(100),status:eq(Paid)) is documented in
the eQuantic.Linq query-string reference.
Paging that tells you what you got
PagedResult<OrderData> page = await repo.GetPagedAsync(PageRequest.Of(2, 20), options);
// page.Items, page.TotalCount, page.PageIndex, page.PageSize, page.PageCount,
// page.HasPreviousPage, page.HasNextPage
PageRequest is one-based (Skip/Take derived); PagedResult<T> carries the items and the
totals — no second count call, no bare IEnumerable<T>.
Provider-agnostic by design
This package is the contracts (IRepository, IUnitOfWork, QueryOptions, PageRequest,
PagedResult, specifications). The persistence engine is kept out of the type signatures —
IRepository<TEntity, TKey>, not IRepository<TUnitOfWork, TEntity, TKey>. The Entity Framework
implementation lives in the provider packages (eQuantic.Core.Data.EntityFramework and friends).
Install
dotnet add package eQuantic.Core.Data
Targets net8.0 and net10.0. Depends only on the framework-free
eQuantic.Linq.Web and
eQuantic.Linq.Specification.
Learn more
- Repository Pattern walkthrough — a full example: data entities, unit of work, repository, specifications and domain services.
- v5 contracts design — the rationale, the consolidated interface and the breaking-change/migration summary.
- Releasing — the automated release flow (maintainers).
Upgrading to v5
v5 is a deliberate breaking redesign: one QueryOptions argument per read (not
Action<Configuration> + overloads), PagedResult<T> paging, the unit-of-work type parameter
removed from IRepository/GetRepository, an IEntity<TKey> constraint (no new()), the
SQL/relational surface moved to the provider layer, and the monolithic eQuantic.Linq dependency
replaced by eQuantic.Linq.Web + eQuantic.Linq.Specification. The full before/after is in the
design doc.
MIT © eQuantic Tech
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. 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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. 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. |
-
net10.0
- eQuantic.Linq.Specification (>= 3.7.0)
- eQuantic.Linq.Web (>= 3.7.0)
-
net8.0
- eQuantic.Linq.Specification (>= 3.7.0)
- eQuantic.Linq.Web (>= 3.7.0)
NuGet packages (15)
Showing the top 5 NuGet packages that depend on eQuantic.Core.Data:
| Package | Downloads |
|---|---|
|
eQuantic.Core.Data.EntityFramework
Core Data library for Entity Framework |
|
|
eQuantic.Core.Data.EntityFramework.SqlServer
Core Data library for Entity Framework and SQL Server |
|
|
eQuantic.Core.Data.MongoDb
Native MongoDB implementation of the eQuantic.Core.Data contracts — the MongoDB Driver directly, no Entity Framework, with first-class document-store migrations. |
|
|
eQuantic.Core.Data.EntityFramework.MongoDb
Core Data library for Entity Framework and Mongo DB |
|
|
eQuantic.Core.Data.EntityFramework.MySql
Core Data library for Entity Framework and MySQL |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 6.0.0 | 0 | 7/22/2026 |
| 5.8.0 | 0 | 7/22/2026 |
| 5.7.0 | 0 | 7/22/2026 |
| 5.6.1 | 0 | 7/21/2026 |
| 5.6.0 | 0 | 7/21/2026 |
| 5.5.0 | 0 | 7/21/2026 |
| 5.4.0 | 0 | 7/21/2026 |
| 5.3.0 | 41 | 7/20/2026 |
| 5.2.0 | 37 | 7/20/2026 |
| 5.1.0 | 154 | 7/19/2026 |
| 5.0.0 | 53 | 7/19/2026 |
| 4.3.2 | 880 | 3/2/2026 |
| 4.3.1 | 512 | 3/2/2026 |
| 4.3.0 | 529 | 2/17/2026 |
| 4.2.3 | 8,794 | 8/25/2024 |
| 4.2.2 | 1,763 | 7/22/2024 |
| 4.2.1 | 6,198 | 1/8/2024 |
| 4.2.0 | 2,338 | 12/20/2023 |
| 4.1.1 | 1,518 | 11/18/2023 |
| 4.1.0 | 1,365 | 10/21/2023 |
Entity ignorant persistance with Repository Pattern