using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.Data.SqlClient;
public static void Main()
DapperPlusManager.Entity<Order>()
.Identity(x => x.OrderID)
.Map(x => new { x.Number })
.MapValue(true, "IsActive")
.Map(x => x.Items.Sum(y => y.Price), "TotalAmount")
.MapWithOptions(x => x.CreatedDate, options => {
options.FormulaInsert = "GETDATE()";
DapperPlusManager.Entity<OrderItem>()
.Identity(x => x.OrderItemID)
.Map(x => x.Parent.OrderID, "OrderID")
var orders = new List<Order>();
var order1 = new Order() { Number = "Order #1", TotalAmount = 1199m};
order1.Items = new List<OrderItem>() {
new OrderItem() { Parent = order1, ItemName = "Dapper Plus", Quantity = 4, Price = 1199m }
var order2 = new Order() { Number = "Order #2", TotalAmount = 2098m};
order2.Items = new List<OrderItem>() {
new OrderItem() { Parent = order2, ItemName = "Entity Framework Extensions", Quantity = 9, Price = 1399m },
new OrderItem() { Parent = order2, ItemName = "C# Eval Expression", Quantity = 9, Price = 699m }
var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServer());
connection.CreateTable<Order>();
connection.CreateTable<OrderItem>();
connection.BulkInsert(orders).ThenBulkInsert(x => x.Items);
FiddleHelper.WriteTable(connection.Query<Order>("SELECT * FROM [Order]"));
FiddleHelper.WriteTable(connection.Query<OrderItem>("SELECT * FROM [OrderItem]"));
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int OrderID { get; set; }
public string Number { get; set; }
public decimal TotalAmount { get; set; }
public DateTime CreatedDate { get; set; }
public bool IsActive { get; set; }
public List<OrderItem> Items { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int OrderItemID { get; set; }
public Order Parent { get; set; }
public int OrderID { get; set; }
public string ItemName { get; set; }
public int Quantity { get; set; }
public decimal Price { get; set; }