using System.Collections.Generic;
using System.Data.Entity;
using System.Linq.Expressions;
public static void Main()
dynamic list = JsonConvert.DeserializeObject(json);
EvalManager.DefaultContext.RegisterAssembly(typeof(Program).Assembly);
using (var context = new EntityContext())
var listToMerge = new List<object>();
foreach(var item in list)
var obj = Eval.Execute("new " + item.Type + "()");
foreach(var property in item.Properties)
Eval.Execute(property.Name + " = '" + property.Value + "'", obj);
FiddleHelper.WriteTable("1 - Before Merge", context.Customers.AsNoTracking());
if(listToMerge.Count > 0 && listToMerge[0] is Customer)
context.BulkMerge(listToMerge.Cast<Customer>(), options => options.ColumnPrimaryKeyExpression = x => x.Code);
FiddleHelper.WriteTable("2 - After Merge", context.Customers.AsNoTracking());
public static void GenerateData()
using (var context = new EntityContext())
context.Customers.Add(new Customer() { Code = "Z0", FirstName = "Before_FirstName_0", LastName = "Before_LastName_0"});
context.Customers.Add(new Customer() { Code = "Z1", FirstName = "Before_FirstName_1", LastName = "Before_LastName_1"});
public static string GetTitle(Expression expression)
return expression.ToString().Substring(expression.ToString().IndexOf(".Where"));
public class EntityContext : DbContext
public EntityContext() : base(FiddleHelper.GetConnectionStringSqlServer())
public DbSet<Customer> Customers { get; set; }
public int CustomerID { get; set; }
public string Code { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }