using System.Collections.Generic;
using System.Data.Entity;
using Z.EntityFramework.Plus;
public static void Main()
AuditManager.DefaultConfiguration.AutoSavePreAction = (context, audit) =>
var sqlServerContext = new SqlServerContext();
sqlServerContext.AuditEntries.AddRange(audit.Entries);
sqlServerContext.SaveChanges();
using (var context = new EntityContext())
var listToRemove = context.Customers.Where(x => x.IsActive == false ).ToList();
var listToModify = context.Customers.Where(x => x.IsActive == true ).ToList();
var listToAdd = new List<Customer>() { new Customer() { Name = "Customer_C", Description = "Description", IsActive = false}};
context.Customers.AddRange(listToAdd);
context.Customers.RemoveRange(listToRemove);
listToModify.First().Description = "Updated_A";
audit.CreatedBy = "ZZZ Projects";
context.SaveChanges(audit);
Customer customerToRetrieve = null;
using (var context = new EntityContext())
customerToRetrieve = context.Customers.First();
using (var context = new SqlServerContext())
var auditEntries = context.AuditEntries
.Where(x => x.EntityTypeName == typeof(Customer).Name && x.Properties.Any(y => y.PropertyName.ToString() == "CustomerID" && (y.OldValueFormatted == customerToRetrieve.CustomerID.ToString() || y.OldValueFormatted == customerToRetrieve.CustomerID.ToString())))
.Include(x => x.Properties)
FiddleHelper.WriteTable("AuditEntries:", auditEntries);
FiddleHelper.WriteTable("AuditEntryProperties:", auditEntries.SelectMany(x => x.Properties));
public static void GenerateData()
using (var context = new EntityContext())
context.Customers.Add(new Customer() { Name ="Customer_A", Description = "Description", IsActive = true });
context.Customers.Add(new Customer() { Name ="Customer_B", Description = "Description", IsActive = false });
public class EntityContext : DbContext
public EntityContext() : base(FiddleHelper.GetConnectionStringSqlServer())
public DbSet<Customer> Customers { get; set; }
public class SqlServerContext : DbContext
public SqlServerContext() : base(FiddleHelper.GetConnectionStringSqlServer())
public DbSet<AuditEntry> AuditEntries { get; set; }
public DbSet<AuditEntryProperty> AuditEntryProperties { get; set; }
public int CustomerID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public Boolean IsActive { get; set; }