using System.Collections.Generic;
using System.Data.Entity;
public static void Main()
using (var context = new EntityContext())
context.CsvRows.Add(new CsvRow() { IsActive = true, Flag = true, ActiveDate = null});
context.CsvRows.Add(new CsvRow() { IsActive = false, Flag = true, ActiveDate = DateTime.Now.AddDays(-7)});
context.CsvRows.Add(new CsvRow() { IsActive = true, Flag = true, ActiveDate = DateTime.Now.AddDays(-7)});
FiddleHelper.WriteTable("1 - Data Before", context.CsvRows.ToList());
using (var context = new EntityContext())
var list = new List<CsvRow>();
list.Add(new CsvRow() { ID = 1, IsActive = true, Flag = true});
list.Add(new CsvRow() { ID = 2, IsActive = true, Flag = true});
list.Add(new CsvRow() { ID = 3, IsActive = false, Flag = true});
list.Where(x => x.Flag).ToList().ForEach(x => x.ActiveDate = DateTime.Now);
context.BulkMerge(list, options => {
options.PostConfiguration = config => {
var activeDateColumn = config.ColumnMappings.Single(x => x.SourceName == "ActiveDate");
activeDateColumn.FormulaUpdate = "CASE WHEN StagingTable.IsActive = 0 THEN NULL ELSE ISNULL(DestinationTable.ActiveDate, StagingTable.ActiveDate) END";
FiddleHelper.WriteTable("2 - Data After", context.CsvRows.ToList());
public class EntityContext : DbContext
public EntityContext() : base(FiddleHelper.GetConnectionStringSqlServer())
public DbSet<CsvRow> CsvRows { get; set; }
public int ID { get; set; }
public bool IsActive { get; set; }
public bool Flag { get; set; }
public DateTime? ActiveDate { get; set; }