public Dictionary <string, Region> SetupTree(MyContext context, Regions regionsTree) { void Visitor(List <EntityTree <Region> > items, Region parent, Action <EntityTree <Region>, Region> visitAction) { if (items == null) { return; } foreach (var entityTree in items) { visitAction(entityTree, parent); Visitor(entityTree.Children, entityTree.Item, visitAction); } } List <Region> regionsFlat = new List <Region>(); Visitor(regionsTree.Cast <EntityTree <Region> >().ToList(), null, (tree, parent) => context.Regions.AddNextChild(parent, tree.Item)); Visitor(regionsTree.Cast <EntityTree <Region> >().ToList(), null, (tree, region) => regionsFlat.Add(tree.Item)); context.SaveChanges(); return(regionsFlat.ToDictionary(r => r.Name, r => r)); }