Mockapala.Export.SqlServer

SQL Server exported for Mockapala


Keywords
data, mssql, seed, seeding, sql-server, sqlserver, test, test-data
License
MIT
Install
Install-Package Mockapala.Export.SqlServer -Version 0.1.0-alpha.2

Documentation

Mockapala logo

Mockapala.Export.SqlServer

SQL Server exporter for Mockapala. Bulk-inserts generated test data into SQL Server using SqlBulkCopy for high-performance seeding.

Installation

dotnet add package Mockapala.Export.SqlServer

Usage

using Mockapala.Schema;
using Mockapala.Generation;
using Mockapala.Export.SqlServer;

// 1. Define schema
var schema = SchemaCreate.Create()
    .Entity<Company>(e => e.Key(c => c.Id))
    .Entity<Customer>(e =>
    {
        e.Key(c => c.Id);
        e.Relation<Company>(c => c.CompanyId);
    })
    .Entity<Order>(e =>
    {
        e.Key(o => o.Id);
        e.Relation<Customer>(o => o.CustomerId);
    })
    .Build();

// 2. Generate data
var generator = new DataGenerator();
var data = generator.Generate(schema, cfg => cfg
    .Count<Company>(5)
    .Count<Customer>(50)
    .Count<Order>(200)
    .Seed(42));

// 3. Export to SQL Server
var exporter = new SqlBulkCopyExporter();
exporter.ExportToDatabase(schema, data, "Server=localhost;Database=TestDB;Trusted_Connection=True;TrustServerCertificate=True;");

Note: The target tables must already exist in the database. The exporter does not create tables automatically.

Options

Configure the exporter via SqlBulkCopyExportOptions:

var exporter = new SqlBulkCopyExporter(new SqlBulkCopyExportOptions
{
    UseDataReader = true,          // Stream rows via IDataReader (lower memory) — default: true
    BatchSize = 1000,              // Rows per batch (0 = SqlBulkCopy default) — default: 0
    QuoteIdentifiers = true,       // Wrap table/column names in brackets — default: true
    BulkCopyOptions = SqlBulkCopyOptions.KeepIdentity, // Preserve generated IDs — default: KeepIdentity
    TableNameResolver = type => type.Name, // Custom table name mapping — default: type name
});
Option Default Description
UseDataReader true When true, streams rows via IDataReader for lower memory usage. When false, builds a DataTable per entity type.
BatchSize 0 Number of rows per batch. 0 uses the SqlBulkCopy default.
QuoteIdentifiers true Wraps table and column names in [brackets].
BulkCopyOptions KeepIdentity SqlBulkCopyOptions flags passed to SqlBulkCopy. KeepIdentity preserves the IDs generated by Mockapala.
TableNameResolver Type name Func<Type, string> that maps an entity type to its destination table name.
DefaultSchema null Default schema prefix for all tables (e.g. "dbo"). When null, no schema prefix is added.
SchemaResolver null Func<Type, string?> that resolves the schema per entity type. Non-null return overrides DefaultSchema.

Schema Prefix

var exporter = new SqlBulkCopyExporter(new SqlBulkCopyExportOptions
{
    DefaultSchema = "dbo", // All tables: [dbo].[TableName]
});

Override per entity type:

var exporter = new SqlBulkCopyExporter(new SqlBulkCopyExportOptions
{
    DefaultSchema = "dbo",
    SchemaResolver = type => type == typeof(Order) ? "sales" : null, // [sales].[Order], [dbo].[Company], ...
});

Table and Column Names from Schema

The exporter respects ToTable and HasColumnName metadata defined in the Mockapala schema:

var schema = SchemaCreate.Create()
    .Entity<Order>(e =>
    {
        e.Key(o => o.Id);
        e.ToTable("orders");
        e.Property(o => o.CustomerId).HasColumnName("customer_id");
    })
    .Build();

Priority: TableNameResolver (exporter option) > ToTable (schema) > type name.

Requirements

  • .NET 10+
  • A running SQL Server instance with pre-created tables matching your entity schema