using System.Data.Entity;
using System.Collections.Generic;
public static void Main()
List<Guid> listKey = new List<Guid>() { Guid.NewGuid(),Guid.NewGuid() };
List<Invoice> invoices = new List<Invoice>() {
new Invoice() { Description = "Updated_A", ColumGuid = listKey.ElementAt(0), InvoiceItems = new List<InvoiceItem>() { new InvoiceItem() { Description = "Updated_A_InvoiceItem_A", ColumGuid = listKey.ElementAt(0) }}},
new Invoice() { Description = "Updated_B", ColumGuid = listKey.ElementAt(1), InvoiceItems = new List<InvoiceItem>() { new InvoiceItem() { Description = "Updated_B_InvoiceItem_A", ColumGuid = listKey.ElementAt(1) }}}};
invoices.Add(new Invoice() { Description = "Invoice_C", ColumGuid = Guid.NewGuid(), InvoiceItems = new List<InvoiceItem>() { new InvoiceItem() { Description = "Invoice_C_InvoiceItem_A", ColumGuid = Guid.NewGuid() } , new InvoiceItem() { Description = "Invoice_C_InvoiceItem_B" , ColumGuid = Guid.NewGuid()}}});
using (var context = new EntityContext())
context.BulkMerge(invoices, options =>
options.IncludeGraph = true;
options.IncludeGraphOperationBuilder = operation =>
if (operation is BulkOperation<Invoice>)
var bulk = (BulkOperation<Invoice>) operation;
bulk.ColumnPrimaryKeyExpression = x => x.ColumGuid ;
else if (operation is BulkOperation<InvoiceItem>)
var bulk = (BulkOperation<InvoiceItem>) operation;
bulk.ColumnPrimaryKeyExpression = x => x.ColumGuid;
using (var context = new EntityContext())
FiddleHelper.WriteTable(context.Invoices.ToList());
FiddleHelper.WriteTable(context.InvoiceItems.ToList());
public static void GenerateData(List<Guid> listKey)
List<Invoice> list = new List<Invoice>() {
new Invoice() { Description = "Invoice_A", ColumGuid = listKey.ElementAt(0), InvoiceItems = new List<InvoiceItem>() { new InvoiceItem() { Description = "Invoice_A_InvoiceItem_A", ColumGuid = listKey.ElementAt(0) } , new InvoiceItem() { Description = "Invoice_A_InvoiceItem_B", ColumGuid = Guid.NewGuid() }}},
new Invoice() { Description = "Invoice_B", ColumGuid = listKey.ElementAt(1), InvoiceItems = new List<InvoiceItem>() { new InvoiceItem() { Description = "Invoice_B_InvoiceItem_A", ColumGuid = listKey.ElementAt(1) } , new InvoiceItem() { Description = "Invoice_B_InvoiceItem_B" , ColumGuid = Guid.NewGuid() }}}};
using (var context = new EntityContext())
context.BulkInsert(list, options => options.IncludeGraph = true);
public class EntityContext : DbContext
public EntityContext() : base(FiddleHelper.GetConnectionStringSqlServer())
public DbSet<Invoice> Invoices { get; set; }
public DbSet<InvoiceItem> InvoiceItems { get; set; }
public int InvoiceID { get; set; }
public Guid ColumGuid { get; set; }
public string Description { get; set; }
public List<InvoiceItem> InvoiceItems { get; set; }
public int InvoiceItemID { get; set; }
public Guid ColumGuid { get; set; }
public string Description { get; set; }