SQL Server exporter for Mockapala. Bulk-inserts generated test data into SQL Server using SqlBulkCopy for high-performance seeding.
dotnet add package Mockapala.Export.SqlServerusing 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.
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. |
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], ...
});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.
- .NET 10+
- A running SQL Server instance with pre-created tables matching your entity schema
