using System.Collections.Generic;
using System.Data.SqlClient;
public static void Main()
var invoices = new List<Invoice>();
for(int i = 0; i < 3; i++)
var invoice = new Invoice() { Number = "Invoice_" + i };
invoice.InvoiceMeta = new InvoiceMeta() { TotalPrice = 5, TotalQuantity = 3 };
invoice.InvoiceItems = new List<InvoiceItem>();
for(int j = 0; j < 2; j++)
invoice.InvoiceItems.Add(new InvoiceItem() { ProductID = j + 1, UnitPrice = j + 1, Quantity = j + 1 });
var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServer());
connection.BulkInsert(invoices, x => x.InvoiceMeta, x => x.InvoiceItems);
FiddleHelper.WriteTable("1 - Invoice", connection.Query<Invoice>("SELECT * FROM Invoice"));
FiddleHelper.WriteTable("2 - InvoiceMeta", connection.Query<InvoiceMeta>("SELECT * FROM InvoiceMeta"));
FiddleHelper.WriteTable("3 - InvoiceItem", connection.Query<InvoiceItem>("SELECT * FROM InvoiceItem"));
public static void SetGlobalMapping()
DapperPlusManager.Entity<Invoice>().Identity(x => x.InvoiceID, true);
DapperPlusManager.Entity<InvoiceItem>().Identity(x => x.InvoiceItemID, true);
public int InvoiceID { get; set; }
public string Number { get; set; }
public InvoiceMeta InvoiceMeta { get; set; }
public List<InvoiceItem> InvoiceItems { get; set; }
public int InvoiceID { get; set; }
public decimal TotalPrice { get; set; }
public int TotalQuantity { get; set; }
public int InvoiceItemID { get; set; }
public int InvoiceID { get; set; }
public int ProductID { get; set; }
public decimal UnitPrice { get; set; }
public decimal UnitDiscount { get; set; }
public int Quantity { get; set; }
public InvoiceItemMeta InvoiceItemMeta { get; set; }
public class InvoiceItemMeta
public int InvoiceItemID { get; set; }
public decimal TotalPrice { get; set; }
public static void CreateDatabase()
var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServer());
[InvoiceID] [INT] IDENTITY(1,1) NOT NULL,
[Number] [VARCHAR](20) NULL,
CONSTRAINT [PK_Invoice] PRIMARY KEY CLUSTERED
CREATE TABLE [InvoiceMeta]
[InvoiceID] [INT] IDENTITY(1,1) NOT NULL,
[TotalPrice] [MONEY] NULL,
[TotalQuantity] [int] NULL,
CONSTRAINT [PK_InvoiceMeta] PRIMARY KEY CLUSTERED
CREATE TABLE [InvoiceItem]
[InvoiceItemID] [INT] IDENTITY(1,1) NOT NULL,
[InvoiceID] [INT] NOT NULL,
[ProductID] [INT] NOT NULL,
[UnitPrice] [MONEY] NOT NULL,
[UnitDiscount] [MONEY] NOT NULL,
[Quantity] [INT] NOT NULL,
CONSTRAINT [PK_InvoiceItem] PRIMARY KEY CLUSTERED
CREATE TABLE [InvoiceItemMeta]
[InvoiceItemID] [INT] IDENTITY(1,1) NOT NULL,
[TotalPrice] [MONEY] NULL,
CONSTRAINT [PK_InvoiceItemMeta] PRIMARY KEY CLUSTERED