using System.Data.Entity;
using System.Collections.Generic;
using Z.EntityFramework.Extensions;
using System.Data.Entity.Infrastructure;
public static void Main()
EntityFrameworkManager.PreBulkSaveChanges = ctx =>
var modifiedEntities = ctx.ChangeTracker.Entries().ToList();
foreach (var change in modifiedEntities)
if (change.State == EntityState.Added)
change.CurrentValues["CreatedDate"] = DateTime.Now;
else if (change.State == EntityState.Modified)
change.CurrentValues["ModifiedDate"] = DateTime.Now;
using (var context = new EntityContext())
var list = context.Customers.ToList();
context.Customers.RemoveRange(list.Take(2));
list.ForEach(x => { x.Name += "_Updated"; x.IsActive = false; });
var newCustomers = new List<Customer>();
newCustomers.Add(new Customer() { Name ="Customer_E", IsActive = true});
newCustomers.Add(new Customer() { Name ="Customer_F", IsActive = true});
context.Customers.AddRange(newCustomers);
context.BulkSaveChanges();
using (var context = new EntityContext())
FiddleHelper.WriteTable("After_BulkSaveChanges", context.Customers.ToList());
public static void GenerateData()
using (var context = new EntityContext())
context.Customers.Add(new Customer() { Name ="Customer_A", IsActive = true });
context.Customers.Add(new Customer() { Name ="Customer_B", IsActive = true });
context.Customers.Add(new Customer() { Name ="Customer_C", IsActive = true });
context.Customers.Add(new Customer() { Name ="Customer_D", IsActive = true });
context.BulkSaveChanges();
using (var context = new EntityContext())
FiddleHelper.WriteTable("Before_BulkSaveChanges", context.Customers.ToList());
public class EntityContext : DbContext
public EntityContext() : base(FiddleHelper.GetConnectionStringSqlServer())
public DbSet<Customer> Customers { get; set; }
public int CustomerID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public Boolean IsActive { get; set; }
public DateTime? CreatedDate { get; set; }
public DateTime? ModifiedDate { get; set; }