using System.Collections.Generic;
using System.Data.Entity;
public static void Main()
using (var context = new EntityContext())
var employees = context.Employees.Where(x => x.Name.StartsWith("Employee_"))
.ToSelfHierarchyList(null, options => {
options.ColumnMappings.Add("BossID", "EmployeeID");
options.FlatListRecursionLevel = int.MaxValue;
FiddleHelper.WriteTable("1 - Employee + Boss", employees);
public static void SeedEmployee()
using (var context = new EntityContext())
var ceo_1 = new Employee() { Name = "CEO_1" };
context.Employees.AddRange(new List<Employee>() { ceo_1 });
context.BatchSaveChanges();
var boss_1 = new Employee() { Name = "Boss_1", BossID = ceo_1.EmployeeID };
var boss_2 = new Employee() { Name = "Boss_2", BossID = ceo_1.EmployeeID };
context.Employees.AddRange(new List<Employee>() { boss_1, boss_2 });
context.BatchSaveChanges();
var employee_1 = new Employee() { Name = "Employee_1", BossID = boss_1.EmployeeID };
var employee_2 = new Employee() { Name = "Employee_2", BossID = boss_2.EmployeeID };
var employee_3 = new Employee() { Name = "Employee_3", BossID = boss_2.EmployeeID };
context.Employees.AddRange(new List<Employee>() { employee_1, employee_2, employee_3 });
context.BatchSaveChanges();
public class EntityContext : DbContext
public EntityContext() : base(FiddleHelper.GetConnectionStringSqlServer())
public DbSet<Employee> Employees { get; set; }
public int EmployeeID { get; set; }
public string Name { get; set; }
public int BossID { get; set; }