using System.Collections.Generic;
using System.Diagnostics;
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
public static void Main()
using (var context = new EntityContext())
context.Database.EnsureCreated();
using (var context = new EntityContext())
context.BulkInsert(Data());
context.BulkInsert(OrderData());
using (var context = new EntityContext())
StringBuilder sb = new StringBuilder();
var joined = from o in context.Orders
join c in context.Customers on o.SecondaryID equals c.SecondaryID
select new Order { OrderID = o.OrderID, CustomerID = c.CustomerID };
FiddleHelper.WriteTable("1 - Before (Customer): ", context.Customers.AsNoTracking().ToList());
FiddleHelper.WriteTable("1 - Before (Order): ", context.Orders.AsNoTracking().ToList());
joined.UpdateFromQuery(x => new Order { CustomerID = x.CustomerID }, options => {
options.Executing = command => {
sb.AppendLine(command.CommandText);
FiddleHelper.WriteTable("2 - After (Order): ", context.Orders.AsNoTracking().ToList());
Console.Write(sb.ToString());
public static List<Customer> Data()
List<Customer> list = new List<Customer>();
for(int i = 0; i < 3; i++)
list.Add(new Customer() { Name = "Customer_" + i, Counter = i, SecondaryID = i });
public static List<Order> OrderData()
List<Order> list = new List<Order>();
for (int i = 0; i <3; i++){
list.Add(new Order() { SecondaryID = i });
public class EntityContext : DbContext
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
optionsBuilder.UseSqlServer(new SqlConnection(FiddleHelper.GetConnectionStringSqlServer()));
base.OnConfiguring(optionsBuilder);
public DbSet<Customer> Customers { get; set; }
public DbSet<Order> Orders {get;set;}
public int CustomerID { get; set; }
public string Name { get; set; }
public int Counter { get; set; }
public int SecondaryID {get;set;}
public int OrderID {get;set;}
public int? CustomerID { get; set;}
public int? SecondaryID {get;set;}