using System.Collections.Generic;
using System.Data.SqlClient;
using System.Threading.Tasks;
public static async Task Main()
var mapperKey = "BestStockResultBulkMerge";
DapperPlusManager.Entity<Order>(mapperKey).Table("Orders")
.UseBulkOptions(options => {
options.ColumnPrimaryKeyNames = new List<string>(){ "OrderID", "CustomerID" };
options.ColumnInputNames = new List<string>() { "Number", "TotalPrice", "TotalQuantity" };
options.ColumnSynchronizeDeleteKeySubsetExpression = c => c.CustomerID;
options.IgnoreOnSynchronizeInsertExpression = c => c.OrderID;
options.IgnoreOnSynchronizeUpdateExpression = c => c.OrderID; });
using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServer()))
var orders = new List<Order>();
orders.Add(new Order() { CustomerID = 1 , Number = "1", TotalPrice = 10, TotalQuantity = 1});
orders.Add(new Order() { CustomerID = 1 , Number = "2", TotalPrice = 20, TotalQuantity = 2});
orders.Add(new Order() { CustomerID = 2 , Number = "3", TotalPrice = 30, TotalQuantity = 3});
connection.BulkInsert(orders);
FiddleHelper.WriteTable("1 - Before", connection.Query<Order>("SELECT * FROM Orders").ToList());
using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServer()))
var orders = new List<Order>();
orders.Add(new Order() { CustomerID = 1 , Number = "1", TotalPrice = 40, TotalQuantity = 4});
await connection.UseBulkOptions(x => x.BatchTimeout = 30).BulkActionAsync(x => x.BulkSynchronize(mapperKey, orders));
using(var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServer()))
FiddleHelper.WriteTable("2 - After", connection.Query<Order>("SELECT * FROM Orders").ToList());
public int OrderID { get; set; }
public int CustomerID { get; set; }
public string Number { get; set; }
public decimal TotalPrice { get; set; }
public int TotalQuantity { get; set; }
public static void CreateDatabase()
using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServer()))
using (var command = connection.CreateCommand())
[OrderID] [INT] IDENTITY(1,1) NOT NULL,
[Number] [VARCHAR](20) NULL,
[TotalPrice] [Money] NULL,
[TotalQuantity] [int] NULL,
CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED
command.ExecuteNonQuery();