using System.Data.Entity;
using System.Collections.Generic;
public static void Main()
using (var context = new EntityContext())
context.Customers.Add(new Customer()
{CustomerID = 1, Name = new FullName("First_A", "Middle_A", "Last_A"), IsActive = false});
context.Customers.Add(new Customer()
{CustomerID = 2, Name = new FullName("First_B", "Middle_B", "Last_B"), IsActive = false});
context.Customers.Add(new Customer()
{CustomerID = 3, Name = new FullName("First_C", "Middle_C", "Last_C"), IsActive = false});
FiddleHelper.WriteTable("1 - Before", context.Customers);
using (var context = new EntityContext())
var updatedCustomers = new List<Customer>();
updatedCustomers.Add(new Customer()
{CustomerID = 1, Name = new FullName("UPDATED_First_A", "UPDATED_Middle_A", "UPDATED_Last_A"), IsActive = false});
updatedCustomers.Add(new Customer()
{CustomerID = 2, Name = new FullName("UPDATED_First_B", "UPDATED_Middle_B", "UPDATED_Last_B"), IsActive = true});
var auditEntries = new List<AuditEntry>();
context.BulkUpdate(updatedCustomers, options =>
options.AuditMode = AuditModeType.ExcludeAll;
options.AuditEntries = auditEntries;
options.ColumnInputExpression = x => new
options.PostConfiguration = postConfiguration =>
var mappings = postConfiguration.ColumnMappings;
mappings.Single(x => x.SourceName == "CustomerID").AuditMode = ColumnMappingAuditModeType.Include;
mappings.Single(x => x.SourceName == "Name.FirstName").AuditMode = ColumnMappingAuditModeType.Include;
FiddleHelper.WriteTable("AUDIT ENTRIES", auditEntries);
using (var context = new EntityContext())
FiddleHelper.WriteTable("2 - After", context.Customers);
public class EntityContext : DbContext
public EntityContext(): base(FiddleHelper.GetConnectionStringSqlServer())
public DbSet<Customer> Customers
public FullName(string first, string middle, string last)