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(x => x.Employees, options => {
options.InverseMapping = true;
options.FlatListRecursionLevel = int.MaxValue;
FiddleHelper.WriteTable("1 - Employee", employees);
public static void SeedEmployee()
using (var context = new EntityContext())
var ceo_1 = new Employee() { Name = "CEO_1" };
var boss_1 = new Employee() { Name = "Boss_1" };
var boss_2 = new Employee() { Name = "Boss_2" };
var employee_1 = new Employee() { Name = "Employee_1"};
var employee_2 = new Employee() { Name = "Employee_2" };
var employee_3 = new Employee() { Name = "Employee_3" };
ceo_1.Employees = new List<Employee>();
boss_1.Employees = new List<Employee>();
boss_2.Employees = new List<Employee>();
ceo_1.Employees.Add(boss_1);
ceo_1.Employees.Add(boss_2);
boss_1.Employees.Add(employee_1);
boss_2.Employees.Add(employee_2);
boss_2.Employees.Add(employee_3);
context.Employees.AddRange(new List<Employee>() { ceo_1, boss_1, boss_2, employee_1, employee_2, employee_3 });
context.BatchSaveChanges();
public class EntityContext : DbContext
public EntityContext() : base(FiddleHelper.GetConnectionStringSqlServer())
protected override void OnModelCreating(DbModelBuilder modelBuilder)
base.OnModelCreating(modelBuilder);
public DbSet<Employee> Employees { get; set; }
public int EmployeeID { get; set; }
public string Name { get; set; }
public List<Employee> Employees { get; set; }