CSharp · Console
// @nuget: EntityFramework
// @nuget: Z.EntityFramework.Extensions
using System;
using System.Linq;
using System.Data.Entity;
using System.Collections.Generic;
using Z.EntityFramework.Extensions;
using System.Data.Entity.Infrastructure;
public class Program
{
public static void Main()
{
GenerateData();
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 class Customer
{
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; }
}
}