EF Classic - Bulk Insert - Real Life Scenarios - Bulk Insert invoice and related invoice items (Include Graph)

CSharp · Console

/Program.cs

// Entity Framework Classic
// Doc: https://entityframework-classic.net/bulk-insert

// @nuget: Z.EntityFramework.Classic

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Data.Entity;

public class Program
{
	public static void Main()
	{
		var invoices = GenerateInvoices(3, 5);
		
		using (var context = new EntityContext())
		{
			context.BulkInsert(invoices, options => options.IncludeGraph = true);
			
			FiddleHelper.WriteTable("Invoice", context.Invoices);
			FiddleHelper.WriteTable("InvoiceItem", context.InvoiceItems);
		}		
	}

	public static List<Invoice> GenerateInvoices(int invoiceCount, int invoiceItemCount)
	{
		var list = new List<Invoice>();
		
		for(int i = 0; i < invoiceCount; i++)
		{
			var invoice = new Invoice() { Description = "Invoice_" + i, InvoiceItems = new List<InvoiceItem>() };
			list.Add(invoice);
			
			for(int j = 0; j < invoiceItemCount; j++)
			{
				invoice.InvoiceItems.Add(new InvoiceItem() { Description = "InvoiceItem_" + i + "_" + j });
			}
		}

		return list;
	}

	public class EntityContext : DbContext
	{
		public EntityContext() : base(FiddleHelper.GetConnectionStringSqlServer())
		{

		}
		
		public DbSet<Invoice> Invoices { get; set; }		
		public DbSet<InvoiceItem> InvoiceItems { get; set; }
	}

	public class Invoice
	{
		public int InvoiceID { get; set; }
		public string Description { get; set; }
		public List<InvoiceItem> InvoiceItems { get; set; }
	}
	
	public class InvoiceItem
	{
		public int InvoiceItemID { get; set; }
		public string Description { get; set; }
	}
}
;