Entity Framework предлагает только способ, который вы описали, потому что это правильная реализация древовидной структуры в объектном мире.Если вы хотите использовать какие-либо специфические функции базы данных, вы должны обернуть их в пользовательские представления базы данных и отобразить эти представления.Проблема с этим подходом состоит в том, что представление будет только для чтения, поэтому вам все еще понадобится упомянутая сущность для изменения дерева.
Почти каждый раз, когда мне нужно выполнить любой запрос, связанный с обходом иерархии, я использую CTE в настраиваемом представлении.или хранимой процедуры и использовать эту конструкцию SQL в EF.Это просто то, что EF не обрабатывает эффективно.
Как видите, ни одна из этих функций на самом деле не соответствует подходу, основанному на коде.Сначала чистый код не позволяет использовать какие-либо специфические функции базы данных (если вы не добавите их вручную в пользовательском инициализаторе базы данных).Сначала код будет использовать определенную вами сущность и создаст самосвязанную связь «один ко многим».Это будет все.В первом коде вы не можете ожидать каких-либо специфических функций базы данных или скрытой логики базы данных, потому что это то, что вы не можете указать в отображении.
Первый код предназначен для ситуаций, когда вы хотите быстро определить структуру вашего объекта ипросто позвольте EF создать БД для вас.Если вы хотите принять какие-либо решения о базе данных и о том, как она должна быть спроектирована, вы должны сначала вернуться к базе данных.