CoreEx.Cosmos
4.0.0
dotnet add package CoreEx.Cosmos --version 4.0.0
NuGet\Install-Package CoreEx.Cosmos -Version 4.0.0
<PackageReference Include="CoreEx.Cosmos" Version="4.0.0" />
<PackageVersion Include="CoreEx.Cosmos" Version="4.0.0" />
<PackageReference Include="CoreEx.Cosmos" />
paket add CoreEx.Cosmos --version 4.0.0
#r "nuget: CoreEx.Cosmos, 4.0.0"
#:package CoreEx.Cosmos@4.0.0
#addin nuget:?package=CoreEx.Cosmos&version=4.0.0
#tool nuget:?package=CoreEx.Cosmos&version=4.0.0
CoreEx.Cosmos
π§ Preview: newly added in this release. The API surface may still change in a future release without following strict semver until it stabilizes.
Provides the core Azure Cosmos DB access layer:
ICosmosDb/CosmosDbas the CoreEx-Cosmos bridge,CosmosDbContainer<TModel>andCosmosDbMappedContainer<TValue, TModel, TMapper>for typed CRUD + query operations,CosmosDbQuery<TModel>as the composable, invoker-wrapped query/materialization type,CosmosDbInvokerfor structured operation logging and exception mapping, aCosmosDbUnitOfWorktransactional outbox (TransactionalBatch-based), and a Change Feed Processor-based outbox relay.
Overview
CoreEx.Cosmos wraps the Microsoft.Azure.Cosmos SDK with the same CoreEx data conventions used elsewhere in the framework: ETag/optimistic-concurrency checking (via Cosmos DB's native If-Match semantics), multi-tenancy filtering, logical-delete filtering, type-discriminator filtering (for several business model types sharing one container/partition), change-log stamping, PagingArgs paging, and Result<T> (Railway-Oriented Programming) pipeline integration.
The central type is CosmosDb, which holds the CosmosClient/Database and exposes Container<TModel>(id, configure?) as the entry point for all strongly-typed CRUD. CosmosDbContainer<TModel> provides GetAsync, CreateAsync, UpdateAsync, DeleteAsync, UpsertAsync, and Query (returning a CosmosDbQuery<TModel>) β each applying the applicable CoreEx cross-cutting pipeline. CosmosDbMappedContainer<TValue, TModel, TMapper> adds an IBiDirectionMapper layer for use cases where the Cosmos document model type differs from the domain entity type.
The Outbox sub-namespace implements the Transactional Outbox pattern for Cosmos DB: CosmosDbUnitOfWork enlists business mutations and outbox event documents into the same TransactionalBatch (Cosmos DB's only atomic multi-operation primitive - atomic within a single container/logical partition key only), so the write is genuinely all-or-nothing without a separate outbox table. A Change Feed Processor-based relay (CosmosDbOutboxRelay) then decodes, publishes, and cleans up these documents, self-pausing/self-resuming via a circuit breaker on sustained publish failure.
This is a sibling package to CoreEx.Database/CoreEx.Database.SqlServer/CoreEx.Database.Postgres, not a provider underneath CoreEx.Database β Cosmos DB is a document store with no ADO.NET-shaped connection/transaction/parameter surface, so it warrants its own package family while still sharing the same ergonomic CRUD/ROP/paging conventions, and (for the outbox relay specifically) the same harmonized metric names and shared trace-linking helper as CoreEx.Database.SqlServer/CoreEx.Database.Postgres.
This package provides the core CRUD + query access layer, a TransactionalBatch-based transactional outbox (CosmosDbUnitOfWork/CosmosDbEventPublisher), and a Change Feed Processor-based outbox relay (CosmosDbOutboxRelay) - happy path only. Not included: poison-message/dead-letter handling for the relay (a permanently-failing outbox document is redelivered forever by the Change Feed Processor's own native backoff, with no built-in give-up - to be designed as one shared pattern across the SQL Server/Postgres/Cosmos relays, not Cosmos-specific), a multi-query (IMultiQueryArgs) equivalent, and any EF Core-Cosmos integration.
Key capabilities
- π Cosmos DB bridge:
CosmosDbwraps a DI-resolvedCosmosClient(typically registered via Aspire'sbuilder.AddAzureCosmosClient("Cosmos")) and caches both raw SDKContainerinstances (per container id) andCosmosDbContainer<TModel>instances (per(containerId, TModel)pair - not container id alone, since a container may legitimately host more than one type-discriminated model). - π Typed CRUD:
CosmosDbContainer<TModel>providesGetAsync,CreateAsync,UpdateAsync,DeleteAsync,UpsertAsyncwith automatic ETag/concurrency validation (native Cosmos DBIf-Match), tenant isolation, and logical-delete handling. - π Mapped CRUD:
CosmosDbMappedContainer<TValue, TModel, TMapper>layers anIBiDirectionMapper<TValue, TModel>overCosmosDbContainer<TModel>, mapping between the domain entity type and the Cosmos DB document model type transparently for all CRUD operations. - π Composable query:
CosmosDbContainer<TModel>.Query(query?, args?)returns aCosmosDbQuery<TModel>β a dedicated wrapper (not a bareIQueryable<TModel>) constructed overContainer.GetItemLinqQueryable<TModel>(); additional filtering/ordering is composed via thequerydelegate (standard LINQWhere/OrderBy), and anyWithTenantFilter/WithLogicalDeleteFilter/WithTypeDiscriminatorpredicates fromCosmosDbModelOptionsare applied automatically (seeCosmosDbQuery<TModel>.AsQueryable(CosmosDbArgs?), with an optionalCosmosDbArgs.BypassFiltersoverride). - π Invoker-wrapped materializers:
CosmosDbQuery<TModel>provides instance-method materializers βToListAsync,ToCollectionAsync<TColl>,ToItemsResultAsync,SingleAsync/SingleOrDefaultAsync/FirstAsync/FirstOrDefaultAsync,ToMappedItemsAsync,ToMappedItemsResultAsync(plus aWithResultAsyncROP counterpart for each) β usingSkip/Take(translated by the Cosmos DB LINQ provider toOFFSETβ¦LIMIT) viaWithPaging(PagingArgs?). Being instance methods onCosmosDbQuery<TModel>rather thanIQueryable<T>extensions, they structurally cannot collide withCoreEx.EntityFrameworkCore's identically-namedEfDbExtensions(see AGENTS.md), and every materializer routes throughCosmosDbInvokerfor structured logging andCosmosExceptionmapping. - π·οΈ ETag / concurrency: for an
UpdateAsync, the model'sIETag.ETagis mapped intoItemRequestOptions.IfMatchEtag(whereCosmosDbArgs.AutoMapETagistrue, the default); Cosmos DB enforces the optimistic-concurrency check server-side and returns a412 Precondition Failed, whichCosmosDbInvokerconverts to aConcurrencyException/Result.ConcurrencyError. - π Multi-tenancy: non-query operations automatically reject a mismatched
IReadOnlyTenantId.TenantIdas not-found;Query()only applies the equivalentTenantId == executionContext.TenantIdpredicate whenCosmosDbModelOptions.WithTenantFilter()has been configured. - ποΈ Logical delete: entities implementing
ILogicallyDeletedare soft-deleted (IsDeleted = truevia a read-modify-ReplaceItemAsync) onDeleteAsyncrather than physically removed; a physicalDeleteAsyncis idempotent (a404is not an error). - π·οΈ Type discriminator (multi-type containers):
CosmosDbModelOptions<TModel>.WithTypeDiscriminator()reuses the existingITypeDiscriminator/IReadOnlyTypeDiscriminatorhook (auto-populated byModel.PrepareCreate/PrepareUpdate) to let several business model types safely share one container/partition β no envelope/wrapper type required. - β³ Time-to-live:
CosmosDbModelOptions<TModel>.WithTimeToLive(Func<TModel, int?>)computes and applies a document'sttlonCreateAsync/UpdateAsync(requiresTModelto implement the mutableITimeToLiveβ Cosmos DB'sttlis a document-body field, not a separate SDK request option, so a computed value can only take effect by being written back onto the model). Where not configured, a model's ownITimeToLive.TimeToLivevalue (if any) simply serializes through as-is;ITimeToLive/IReadOnlyTimeToLivelive in coreCoreEx.Data(alongsideIPartitionKey/ITypeDiscriminator) for reuse by a future non-Cosmos NoSQL package. - π Fixed partition key:
CosmosDbModelOptions<TModel>.WithFixedPartitionKey(string?)configures one constant partition key value for the whole container β suitable for small, bounded containers where partitioning isn't meaningful (Cosmos DB's own guidance: a container well under the 20 GB/10,000 RU/s per-logical-partition limits typically needs only one or two physical partitions regardless of partition key cardinality). It also defaultsGetAsync/DeleteAsync'spartitionKeyparameter (now optional) when the caller omits it βWithPartitionKey(Func<TModel, string?>)'s per-model function cannot do this, since Get/Delete have no model instance to invoke it against. The two are mutually exclusive (configuring both throwsInvalidOperationException), and either always wins over β but must not silently disagree with β a non-null value the model already carries viaIReadOnlyPartitionKey(a genuine mismatch throws rather than being overridden, since Cosmos DB itself requires the document body's partition-key-path value to agree with the value supplied for the operation). - π Structured logging:
CosmosDbInvokerwraps every CRUDCosmosDboperation with structured log entries (tracing/Activityspans are intentionally disabled viaIsTracingDisabled- CRUD is high-frequency) and convertsCosmosExceptioninto the corresponding CoreEx exception (NotFoundException/DuplicateException/ConcurrencyException). The outbox relay'sCosmosDbOutboxRelayInvoker(Outboxsub-namespace) is a separate, tracing-enabled invoker - relay batch processing is comparatively low-frequency and specifically where distributed-tracing visibility matters most. - π Transactional outbox:
CosmosDbUnitOfWorkimplementsIUnitOfWork, enlistingCosmosDbContainer<TModel>Create/Update/Delete calls made within itsTransactionAsyncscope into one ambientTransactionalBatch(client-side fail-fast if two enlisted operations target different containers/partition keys);CosmosDbEventPublisher(anIEventPublisher) enlists outbox event documents into the same batch, so the business mutation and its event are atomic without a separate outbox table. Outbox documents are auto-excluded from ordinary business queries via a reserved$outboxid-prefix (no opt-in required).IUnitOfWork.SynchronizeETag<T>resolves a mapped contract's true, server-assignedETagafter the batch commits (deferred execution means it isn't known upfront) by correlating onCompositeKey, not object reference. - π€ Outbox relay:
CosmosDbOutboxRelay/CosmosDbOutboxRelayProcessor(Outboxsub-namespace) consume outbox event documents via a Cosmos DB Change Feed Processor (push-based, SDK-managed - not a polling loop like the SQL Server/Postgres relay), decode/publish/cleanup-delete each batch, and self-pause/self-resume via aCircuitBreakerResiliency<TOwner>-based circuit breaker on a sustained publish-failure ratio. Register viabuilder.AddCosmosDbOutboxRelayHostedService(containerId, servicesCount?)- one call per outbox-hosting container, each with its own concurrency count. This registers the relay only; a genuine destinationIEventPublisher(e.g. Azure Service Bus, matching the SQL Server/Postgres samples) must also be registered - see AGENTS.md.CosmosDbEventPublisher(the write-side publisher, above) must never be registered for this role;CosmosDbOutboxRelayProcessor.ProcessBatchAsyncdetects that misconfiguration and throws immediately with an actionable message rather than failing deeper inside the publish call. - π Outbox metrics:
CosmosMetricsexposes .NETMeterinstruments harmonized withSqlServerMetrics/PostgresMetrics:cosmos.outbox.enqueue(counter),cosmos.outbox.relay.publishandcosmos.outbox.relay.publish.failed(counters),cosmos.outbox.relay.oldest_lagandcosmos.outbox.relay.newest_lag(histograms in ms), plus Cosmos-specificcosmos.outbox.relay.cleanup.deleted/cosmos.outbox.relay.cleanup.failed(the relay's own post-publish document cleanup has no SQL Server/Postgres equivalent). - π₯ Batch import & container provisioning:
CosmosDbBatch.ImportBatchAsync(Async)/ImportDiscriminatedBatchAsyncload raw JSON directly into aContainer/Database(noCoreEx.Cosmosmodel type involved);CosmosDbContainerExtensions.ReplaceOrCreateContainerAsync/DeleteContainerIfExistsAsyncprovision or reset a container from code. Neither depends on the rest of this package - useful for data seeding, bulk/one-off loads, and migrations alike. - π§© Multi-set queries:
ICosmosDb.SelectMultiSetAsync/SelectMultiSetWithResultAsync(containerId, MultiSetOptions, cancellationToken?)(Extendednamespace) read multiple, type-discriminator-keyed sets of documents from the same container/partition in one round-trip - the Cosmos DB equivalent ofCoreEx.Database.Extended's positional/ordered multi-set queries, adapted for a discriminator-keyed (not positional) demux.MultiSetSingleArgs<TModel>/MultiSetCollArgs<TColl, TModel>accumulate matching documents (each per-item tenant/logical-delete/additive-filter-checked viaCosmosDbContainer<TModel>.CheckModel);TModelmust implementIReadOnlyTypeDiscriminator. The type-discriminator's JSON property name is resolved once per call from the ambientCosmosClientOptions.UseSystemTextJsonSerializerWithOptionsnaming policy (e.g.camelCase). Co-located outbox event documents are always excluded server-side; where a model'sCosmosDbModelOptions<TModel>.WithTenantFilter/WithLogicalDeleteFilteris configured, an additional defensive,IS_DEFINED-guarded SQL predicate is layered in as a server-side (RU/bandwidth) optimization - never excluding a document purely for predating the property.MultiSetOptions.Args.QueryRequestOptions, where supplied, takes precedence over one built fromMultiSetOptions.PartitionKey(a genuine mismatch between the two throwsArgumentException).SelectMultiSetWithResultAsyncreturns aResult(Railway-Oriented Programming) only for a genuine business/domain-level outcome (a mappedCosmosException, or aWithFilterauthorization-style denial) -MinimumRows/MaximumRows/malformed-response/argument-validation conditions remain plain exceptions even from this method, consistent withResultbeing reserved for expected errors, not exceptions;SelectMultiSetAsyncis a thinThrowOnError()wrapper over it. See AGENTS.md for the full mechanism.
Key types
| Type | Description |
|---|---|
ICosmosDb / CosmosDb |
CoreEx Cosmos DB bridge: holds CosmosClient, Database, CosmosDbOptions, ExecutionContext, ambient CurrentTransaction (for CosmosDbUnitOfWork); exposes Container<TModel>(containerId, configure?) entry point; caches Container (per containerId) and CosmosDbContainer<TModel> (per (containerId, TModel)) instances; maps CosmosException via HandleCosmosException. |
CosmosDbContainer<TModel> |
Strongly-typed CRUD + query for a single Cosmos DB model type: GetAsync, CreateAsync, UpdateAsync, DeleteAsync, UpsertAsync, Query(query?, args?); applies the applicable CoreEx cross-cutting pipeline; transparently enlists into an ambient CosmosDbUnitOfWork transaction where one is active. |
CosmosDbMappedContainer<TValue, TModel, TMapper> |
Adds an IBiDirectionMapper<TValue, TModel> layer over CosmosDbContainer<TModel> for domain entity β Cosmos DB document model conversion; provides GetAsync, CreateAsync, UpdateAsync, DeleteAsync, UpsertAsync. |
CosmosDbQuery<TModel> |
Composable, invoker-wrapped query type returned by CosmosDbContainer<TModel>.Query(query?, args?): AsQueryable(args?), WithPaging(paging?), and materializers ToListAsync, ToCollectionAsync<TColl>, ToItemsResultAsync, SingleAsync/SingleOrDefaultAsync/FirstAsync/FirstOrDefaultAsync, ToMappedItemsAsync, ToMappedItemsResultAsync (each with a WithResultAsync ROP counterpart). |
CosmosDbArgs |
Per-operation options: NullOnNotFound, AutoMapETag, Refresh, ItemRequestOptions, QueryRequestOptions; defaults sourced from CosmosDbModelOptions<TModel>.Args then CosmosDbOptions.Args. |
CosmosDbOptions |
Instance-level options for ICosmosDb (typically a singleton): default CosmosDbArgs, per-(containerId, TModel) options registry via GetOrAddModelOptions<TModel>(containerId). |
CosmosDbModelOptions<TModel> |
Per-container/model configuration: WithArgs, WithGetKey, WithFormatIdentifier, WithPartitionKey, WithFixedPartitionKey, WithTimeToLive, WithTenantFilter, WithLogicalDeleteFilter, WithTypeDiscriminator. |
CosmosDbInvoker |
InvokerBase<ICosmosDb, CosmosDbArgs> emitting structured log entries for every CRUD CosmosDb operation (tracing intentionally disabled); catches CosmosException and folds into Result/Result<T> failures for ROP callers; also orchestrates CosmosDbUnitOfWork transaction commit/outbox-publish/exception-mapping. |
CosmosDbModelBase |
Optional convenience abstract base implementing IIdentifier<string>, IETag, IPartitionKey, ITimeToLive using the Cosmos DB reserved system property names (id, _etag, ttl). |
CosmosDbTransaction |
The ambient ordinal-to-CompositeKey tracked TransactionalBatch scope bound to CosmosDbUnitOfWork.TransactionAsync - first enlisted operation binds the container/partition key; a mismatched later operation throws client-side, before any network call. |
CosmosDbBatch |
Raw-JSON (JsonArray/JsonObject) batch-import extensions (ImportBatchAsync, ImportDiscriminatedBatchAsync) over Container/Database - no CoreEx.Cosmos model type involved, so a caller controls the exact document shape (partition key, type-discriminator value) directly; suited to data seeding, bulk/one-off loads, and migrations alike. |
CosmosDbContainerExtensions |
Container lifecycle extensions (ReplaceOrCreateContainerAsync, DeleteContainerIfExistsAsync) over raw Database/ContainerProperties - no dependency on any other CoreEx.Cosmos type; useful for provisioning or resetting a database/container from code. |
IMultiSetArgs / IMultiSetArgs<TModel> |
Discriminator-keyed multi-set query contract (Extended): ModelType, ResolveTypeDiscriminator(cosmosDb, containerId) (resolves TModel's configured CosmosDbModelOptions<TModel>.EffectiveTypeDiscriminator), AddItem, BuildFilterClause (builds a defensive, IS_DEFINED-guarded tenant/logical-delete SQL predicate where WithTenantFilter/WithLogicalDeleteFilter is configured); extends the shared CoreEx.Data.IMultiSetArgsCore (MinimumRows, MaximumRows, StopOnNull, InvokeResult). |
MultiSetOptions |
Bundles a multi-set query's per-call inputs (PartitionKey, Args, MultiSetArgs) into one record, avoiding an ever-growing method-parameter list as new capabilities are added. |
MultiSetSingleArgs<TModel> / MultiSetCollArgs<TColl, TModel> |
Concrete IMultiSetArgs<TModel> implementations (Extended) for a single item or a collection of items respectively; guard (via a static constructor) that TModel implements IReadOnlyTypeDiscriminator. |
CosmosDbMultiSetExtensions |
ICosmosDb.SelectMultiSetAsync/SelectMultiSetWithResultAsync(containerId, MultiSetOptions, ...) (Extended) - the multi-set query engine: resolves the discriminator JSON property name, builds/executes a raw stream query (honoring each IMultiSetArgs.BuildFilterClause and a CosmosDbArgs.QueryRequestOptions precedence rule), demuxes/deserializes/filters/accumulates per document, then validates MinimumRows/MaximumRows and invokes InvokeResult() per IMultiSetArgs, in supplied order, honoring StopOnNull. SelectMultiSetAsync is a ThrowOnError() wrapper over the Result-returning SelectMultiSetWithResultAsync. |
CosmosDbUnitOfWork |
IUnitOfWork implementation for ICosmosDb: TransactionAsync orchestration, optional Outbox (IEventPublisher, typically CosmosDbEventPublisher), and SynchronizeETag<T> to resolve a mapped contract's true post-commit ETag by CompositeKey. |
CosmosDbEventPublisher |
EventPublisherBase that enlists outbox event documents (CosmosDbOutboxEvent) into the active CosmosDbUnitOfWork's ambient TransactionalBatch - same container/partition as the paired business mutation, since a dedicated outbox container/table isn't possible while preserving atomicity. |
CosmosDbOutboxEvent |
The outbox event document shape (Id, PartitionKey, Destination, Event as JsonElement, TimeToLive); identified by a reserved $outbox Id prefix, auto-excluded from ordinary business queries against the same container. |
CosmosDbOutboxRelay |
Owns the Change Feed Processor for one monitored container: start/pause/resume/stop lifecycle, circuit-breaker-wrapped batch processing via CosmosDbOutboxRelayProcessor. |
CosmosDbOutboxRelayProcessor |
Pure filter/decode/publish/cleanup-delete batch logic, with no Change Feed Processor SDK dependency - directly unit-testable by handing it a batch of CosmosDbOutboxEvent documents. |
CosmosDbOutboxRelayHostedService |
Thin HostedServiceBase wrapper delegating to CosmosDbOutboxRelay; registered via AddCosmosDbOutboxRelayHostedService(containerId, servicesCount?). |
CosmosMetrics |
Static .NET Meter with counters/histograms for outbox enqueue throughput and relay publish/cleanup/lag, harmonized with SqlServerMetrics/PostgresMetrics. |
Namespaces
| Namespace | Description |
|---|---|
| (root) | Core CRUD + query access layer: CosmosDb, CosmosDbContainer<TModel>, CosmosDbMappedContainer, CosmosDbQuery<TModel>, CosmosDbModelOptions<TModel>. |
Extended |
CosmosDbInvoker, CosmosDbTransaction, CosmosDbHealthCheck, and CosmosDbUnitOfWorkInvoker - orchestrates CosmosDbUnitOfWork transaction commit via CosmosDbInvoker, mirroring CoreEx.Database's SqlServerUnitOfWorkInvoker/PostgresUnitOfWork split of responsibility. Also CosmosDbBatch/CosmosDbContainerExtensions - raw-JSON batch import and container lifecycle helpers with no dependency on the rest of this package. Also IMultiSetArgs/IMultiSetArgs<TModel>/MultiSetSingleArgs<TModel>/MultiSetCollArgs<TColl, TModel>/CosmosDbMultiSetExtensions - the discriminator-keyed multi-set query capability. |
Outbox |
Transactional outbox write side (CosmosDbEventPublisher, CosmosDbOutboxEvent) and relay (CosmosDbOutboxRelay, CosmosDbOutboxRelayProcessor, CosmosDbOutboxRelayOptions, CosmosDbOutboxRelayResiliency, CosmosDbOutboxRelayInvoker, CosmosDbOutboxRelayHostedService). |
Related Namespaces
CoreEx.Data-IUnitOfWork,PagingArgs,ItemsResult<T>,DataResult,IPartitionKey/IReadOnlyPartitionKey,ITenantId,ILogicallyDeleted,ITypeDiscriminator,Model(PrepareCreate/PrepareUpdate),IMultiSetArgsCore(shared base forExtended.IMultiSetArgs's discriminator-keyed multi-set queries) β all reused as-is, unchanged;CosmosDbUnitOfWorkimplementsIUnitOfWorkdirectly (not a Cosmos-specific sub-interface), keeping application-layer services provider-agnostic.CoreEx.Mapping-IBiDirectionMapper<TSource, TDestination>is the mapper contract used byCosmosDbMappedContainer.CoreEx.EntityFrameworkCore- the closest structural analogue (EfDb/EfDbModel/EfDbMappedModel);CosmosDbContainer<TModel>mirrorsEfDbModel<TModel>'s CRUD/ROP shape, adapted to the Cosmos DB SDK.CoreEx.Invokers-CosmosDbInvokerandCosmosDbOutboxRelayInvokerextendInvokerBasefor structured logging/tracing.CoreEx.Events-IEventPublisher/EventPublisherBase(CosmosDbEventPublisher's base),CloudEventTracingExtensions.LinkTraceContext(used by the relay to connect its publish span back to each original producer's trace), andEventFormatter's CloudEvents conversion, shared unchanged withCoreEx.Database's outbox relay.CoreEx.Hosting-HostedServiceBase,CircuitBreakerResiliency<TOwner>(the relay's self-pause/self-resume mechanism, shared withCoreEx.Azure.Messaging.ServiceBus's receiver),ResilienceOwner<TOwner>.CoreEx.Database- the relational sibling family's equivalent outbox relay (DatabaseOutboxRelayBase); Cosmos DB's Change Feed Processor-based push model is deliberately structured differently (mirroring the Azure Service Bus receiver instead), but shares metric naming and trace-linking with it.
Additional Resources
- Microsoft.Azure.Cosmos - The Azure Cosmos DB SDK this package uses.
- Change Feed Processor - The push-based mechanism underlying
CosmosDbOutboxRelay.
AI Usage Guide
An AGENTS.md file is included with this package. AI coding assistants (GitHub Copilot, Claude, Cursor, etc.) that support workspace-injected package documentation will automatically surface concise usage guidance, code examples, and Do Not rules for this package without requiring a local CoreEx checkout.
| 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 is compatible. 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
- Aspire.Microsoft.Azure.Cosmos (>= 13.5.4)
- CoreEx (>= 4.0.0)
- CoreEx.Data (>= 4.0.0)
- CoreEx.Events (>= 4.0.0)
- Microsoft.Azure.Cosmos (>= 3.63.1)
-
net8.0
- Aspire.Microsoft.Azure.Cosmos (>= 13.5.4)
- CoreEx (>= 4.0.0)
- CoreEx.Data (>= 4.0.0)
- CoreEx.Events (>= 4.0.0)
- Microsoft.Azure.Cosmos (>= 3.63.1)
-
net9.0
- Aspire.Microsoft.Azure.Cosmos (>= 13.5.4)
- CoreEx (>= 4.0.0)
- CoreEx.Data (>= 4.0.0)
- CoreEx.Events (>= 4.0.0)
- Microsoft.Azure.Cosmos (>= 3.63.1)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on CoreEx.Cosmos:
| Package | Downloads |
|---|---|
|
CoreEx.UnitTesting
Core .NET extensions and abstractions for the testing of backend services. |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on CoreEx.Cosmos:
| Repository | Stars |
|---|---|
|
Avanade/Beef
The Business Entity Execution Framework (Beef) framework, and the underlying code generation, has been primarily created to support the industrialization of API development.
|
| Version | Downloads | Last Updated |
|---|---|---|
| 4.0.0 | 67 | 9/21/2026 |
| 3.31.0 | 571 | 2/1/2025 |
| 3.30.2 | 283 | 12/11/2024 |
| 3.30.1 | 247 | 12/9/2024 |
| 3.30.0 | 327 | 11/21/2024 |
| 3.29.0 | 263 | 11/19/2024 |
| 3.28.0 | 264 | 11/9/2024 |
| 3.27.3 | 329 | 10/23/2024 |
| 3.27.2 | 277 | 10/17/2024 |
| 3.27.1 | 343 | 10/15/2024 |
| 3.27.0 | 275 | 10/11/2024 |
| 3.26.0 | 276 | 10/3/2024 |
| 3.25.6 | 341 | 10/2/2024 |
| 3.25.5 | 314 | 9/25/2024 |
| 3.25.4 | 282 | 9/24/2024 |
| 3.25.3 | 270 | 9/18/2024 |
| 3.25.2 | 297 | 9/17/2024 |
| 3.25.1 | 377 | 9/16/2024 |
| 3.25.0 | 320 | 9/10/2024 |
| 3.24.1 | 341 | 8/7/2024 |