using System.Collections.Generic;
using Microsoft.Data.SqlClient;
public static partial class MyExtensions
public static ExpandoObject ToExpandoObject(this IDictionary<string, object> dict)
var expando = new ExpandoObject();
var expandoDict = (IDictionary<string, object>)expando;
foreach (var keyValue in dict)
expandoDict.Add(keyValue.Key, keyValue.Value);
public static void Main()
DapperPlusManager.Entity<Order>().Table("Orders")
.Identity(x => x.OrderID);
DapperPlusManager.Entity<ExpandoObject>("MapDapperRow").Table("Orders");
var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServer());
var seedOrders = GenerateOrders(3);
connection.BulkInsert(seedOrders);
FiddleHelper.WriteTable("1 - Order Before:", connection.Query<Order>("SELECT * FROM Orders"));
var orderToInsert = connection.Query("SELECT * FROM Orders").Select(x => ((IDictionary<string, object>)x).ToExpandoObject()).ToList();
connection.BulkInsert("MapDapperRow", orderToInsert);
FiddleHelper.WriteTable("2 - Order After:", connection.Query<Order>("SELECT * FROM Orders"));
public int OrderID { get; set; }
public string Number { get; set; }
public decimal TotalPrice { get; set; }
public int TotalQuantity { get; set; }
public static List<Order> GenerateOrders(int count)
var orders = new List<Order>();
for(int i = 0; i < count; i++)
orders.Add(new Order() { Number = "Order_" + i, TotalPrice = 1 + i * 1.1m, TotalQuantity = 1 + i });
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();