Количество или частота вызовов SaveChange не влияют ни на что, ни на производительность, ни на что. Так почему же вы хотите минимизировать это?
На самом деле, сохранение такой самоссылающейся таблицы с одним SaveChanges невозможно, поскольку при сохранении генерируется идентификатор новой сущности. Итак, сначала вам нужно сохранить его, а затем вы получите идентификатор, который вы можете сохранить в другом объекте. Это может потребовать дальнейших команд обновления для сущности, которую вы только что сохранили.
У вас есть два шанса решить эту проблему.
1) сгенерированные вручную идентификаторы, обработайте все сами, и вы знаете идентификатор перед вашим магазином.
2) Если у вас нет округлости в зависимости, поэтому идеальная древовидная структура позволяет сохранять элементы сверху вниз, уровень за уровнем. Я предполагаю, что у вас есть childs, имеющие ссылку на его родителей, поэтому root не имеет ссылки ни на какие другие элементы, вы сначала сохраняете его, чем потомки 1-го уровня, и т. Д.
Для этого требуется несколько SaveChanges, но это не недостаток. В любом случае это одна команда вставки SQL для каждой сущности, независимо от того, выполняете ли вы ее в 1 SaveChanges или в 100 SaveChanges.
Оба решения избегают команд «Обновить» для сущностей, они выполняют только вставки.
Entity Framework может на самом деле самостоятельно определять эти зависимости и создавать порядок для добавления новых сущностей, но это не реализовано сегодня или не идеально, особенно в таблицах с самоссылкой. Порядок сохранения предметов является случайным. Таким образом, вы должны навести порядок с промежуточными SaveChanges.