DataArc.EntityFrameworkCore

Persistence

Parallel execution and high-performance bulk operations for Entity Framework Core.

Free parallel execution and bulk operations on a standard DbContext. Add commercial SQL Server tooling only where transactional, multi-context, or relational composition capabilities are required.

Overview

Start with the DbContext you already use

DataArc.EntityFrameworkCore extends a standard Entity Framework Core DbContext with a parallel execution builder and memory-efficient bulk operations for data-intensive .NET workloads.

Applications continue to use normal Entity Framework Core APIs, LINQ, change tracking, dependency injection, IDbContextFactory<TContext>, and ordinary tracked persistence.

Use DataArc where composed parallel or high-volume execution is useful and continue using Entity Framework Core normally everywhere else.

Supports .NET 6 through .NET 10.

Current provider: the bulk implementation currently targets SQL Server.

Free to Use

Composable parallel and bulk execution without a commercial DataArc license

DataArc.EntityFrameworkCore is available free of charge.

Use it in personal, commercial, educational, government, and enterprise .NET applications without purchasing a DataArc commercial license.

Install
dotnet add package DataArc.EntityFrameworkCore

Registration

Register DataArc.EntityFrameworkCore once in the application dependency-injection pipeline. Continue registering Entity Framework Core contexts normally.

DataArc registration
services.AddDataArcCore();

Free Execution Features

Compose standard and high-volume write operations without redesigning the persistence layer

  • Parallel execution over a standard DbContext
  • Builder-style composition through AsParallel()
  • Standard entity write operations within the parallel execution builder
  • High-performance bulk insert and delete operations
  • Composition of standard and bulk operations in the same execution pipeline
  • Immediate bulk insert operations
  • Immediate bulk delete operations
  • High-throughput SQL Server bulk execution
  • Batched execution for large data sets
  • Memory-efficient bulk processing
  • Optional database schema selection
  • Compatibility with IDbContextFactory<TContext>
  • Reuse of existing Entity Framework Core connections and metadata
  • Normal tracked Entity Framework Core operations before and after DataArc execution

Immediate Bulk Operations

Execute directly against a standard DbContext

Immediate bulk operations execute when called. They do not wait for a later Entity Framework Core SaveChangesAsync().

AddBulkAsync

Insert entities into the database in batches.

Bulk insert
await dbContext.AddBulkAsync(
    employees,
    batchSize);

Supply a schema when the target table is not in dbo.

Schema
await dbContext.AddBulkAsync(
    employees,
    batchSize,
    schema: "hr");

RemoveBulkAsync

Delete entities from the database in batches.

Bulk delete
await dbContext.RemoveBulkAsync(
    employees,
    batchSize);

Parallel Execution Builder

Compose standard and bulk operations and execute one DataArc pipeline

AsParallel() creates a DataArc execution builder over the existing DbContext, scoped to that originating context.

Parallel execution builder
var affected = await dbContext
    .AsParallel()
    .Add(entity)
    .AddBulk(data, batchSize)
    .SaveChangesParallelAsync();

Standard entity operations and DataArc bulk operations can be composed before execution. The terminal SaveChangesParallelAsync() executes the queued operations through the DataArc parallel execution path and returns the number of affected rows.

DbContext
    |
    v
AsParallel()
    |
    +-- Add(...)
    |
    +-- AddBulk(...)
    |
    v
SaveChangesParallelAsync()
    |
    v
parallel execution

The builder supports standard entity write operations together with DataArc bulk operations without replacing the application's existing Entity Framework Core persistence model.


Standard DbContext Usage

Keep the Entity Framework Core programming model

DataArc.EntityFrameworkCore does not replace DbContext and does not replace the Entity Framework Core change tracker.

Contexts created through standard Entity Framework Core factories continue to query and persist normally.

IDbContextFactory + DataArc
await using var dbContext =
    await dbContextFactory.CreateDbContextAsync();

var existingEmployees = await dbContext
    .Employees
    .AsNoTracking()
    .ToListAsync();

await dbContext.AddBulkAsync(
    newEmployees,
    batchSize);

This allows DataArc parallel or high-volume execution to be introduced into individual workflows without redesigning repositories or replacing the application's existing persistence model.


Performance

High throughput with low managed-memory allocation

DataArc.EntityFrameworkCore is designed for high-throughput execution with low and predictable managed-memory allocation for large data workloads.

Memory efficiency is particularly useful for APIs, background workers, integration services, imports, synchronization workloads, batch processing, and long-running application services.

AddBulkAsync Benchmark

Records Mean Allocated Memory
5,000 14.46 ms 1.26 MB
10,000 56.64 ms 2.45 MB
25,000 73.62 ms 5.99 MB
50,000 257.65 ms 11.93 MB
100,000 453.30 ms 23.73 MB

At 100,000 entities, the benchmark completed in approximately 453 ms while allocating 23.73 MB of managed memory.

Benchmarks were produced using BenchmarkDotNet. Actual performance will vary depending on hardware, database configuration, entity structure, runtime version, and execution environment.


Commercial SQL Server Tooling

Add stronger transactional, multi-context, and relational database capabilities

DataArc.EntityFrameworkCore.SqlServer is the commercial extension to the free DataArc.EntityFrameworkCore package.

Install it only where the application requires the additional SQL Server capabilities.

Commercial package
dotnet add package DataArc.EntityFrameworkCore.SqlServer
  • Transaction-aware bulk inserts and deletes
  • Participation in caller-owned Entity Framework Core transactions
  • Parallel transactional execution
  • Transactional execution pipelines
  • Multi-context command coordination
  • Multi-context query composition
  • DataArc DDL Builder capabilities
  • Composition of multiple DbContext models into deliberate relational database topologies
  • SQL Server-specific execution infrastructure

Commercial Registration

Commercial SQL Server capabilities require DataArc Core initialization with a server key.

Server initialization
services.AddDataArcCore(options =>
    options.UseServerKey());

Transactional Bulk Operations

Commercial bulk operations can participate in a caller-owned Entity Framework Core transaction.

Existing EF Core transaction
await using var transaction =
    await dbContext.Database.BeginTransactionAsync();

await dbContext.AddBulkTransactionalAsync(
    employees,
    100_000,
    "hr");

await transaction.CommitAsync();

The transaction remains owned by the application. DataArc does not commit or roll back a caller-owned transaction.

Parallel Transactional Execution

AsParallelTransaction() is provided by DataArc.EntityFrameworkCore.SqlServer. It uses the same compositional builder model as AsParallel() while executing through the commercial SQL Server transactional path.

AsParallelTransaction
var affected = await dbContext
    .AsParallelTransaction()
    .Add(entity)
    .AddBulk(data, batchSize)
    .CommitTransactionParallelAsync();

CommitTransactionParallelAsync() executes the queued operations through the DataArc transaction-coordinated parallel path.


Multi-Context Command and Query Tooling

Coordinate selected workflows across DbContext boundaries

DataArc.EntityFrameworkCore.SqlServer provides command and query tooling for operations that need to coordinate work across multiple registered Entity Framework Core execution contexts.

Each DbContext remains independently usable through normal Entity Framework Core APIs. Selected workflows can opt into DataArc coordination only where a broader application operation requires it.


DDL Builder

Keep application boundaries without automatically creating relational boundaries

The commercial SQL Server package includes the DataArc DDL Builder for applications that need deliberate control over how multiple Entity Framework Core models are composed into relational databases.

DDL Builder
var dbBuilder =
    _databaseBuilderFactory.CreateDatabaseBuilder();

var db = dbBuilder
    .IncludeDbContext<DatabaseContextReadCommitted>()
    .IncludeDbContext<DatabaseContextReadUncommitted>()
    .IncludeDbContext<DatabaseContextSerializable>()
    .IncludeDbContext<DatabaseContextRepeatableRead>()
    .IncludeDbContext<DatabaseContextSnapshot>()
    .Build(
        applyChanges: true,
        generateScripts: true);

db.ExecuteDrop();
db.ExecuteCreate();

A DbContext boundary does not have to become a relational boundary.

Multiple independently defined contexts can participate in one physical relational database with schemas, foreign keys, constraints, and database-enforced relational integrity where appropriate.

DataArc also supports multiple independent relational databases, each with its own connection string and its own relational model and constraints.

The database topology remains an architectural choice rather than an automatic consequence of the DbContext boundary.


DataArc Orchestration Framework

Compose application orchestration, observation, and free persistence capabilities

DataArc.OrchestrationFramework is available free of charge.

The Framework combines DataArc.Orchestrator, DataArc.Observer, DataArc.EntityFrameworkCore, and supporting DataArc infrastructure into a single application orchestration composition.

DataArc.EntityFrameworkCore.SqlServer remains a separate commercial package and is not required to use the Framework.

Install the Framework
dotnet add package DataArc.OrchestrationFramework

Licensing

Free foundation, commercial SQL Server extension

DataArc.EntityFrameworkCore is available free of charge and does not require a DataArc commercial license, subscription, activation, or runtime entitlement.

DataArc.EntityFrameworkCore.SqlServer is a commercial DataArc product. Its commercial functionality requires the applicable DataArc entitlement and server initialization.

Installing or using the free package does not grant rights to the commercial SQL Server package, and using the free package does not require purchasing it.


Documentation

  • Documentation: dataarc.dev
  • Demo: DataArc.EntityFrameworkCore.Demos public GitHub repository
  • Microsoft Learn: Entity Framework Core extensions

Support

For support and commercial enquiries, contact support@dataarc.dev.