К сожалению, насколько я знаю, способ, которым вы его настраиваете, является правильным.Теперь вы не можете проходить ссылки так легко, потому что теряете GetAncestor и GetDescendant.Достойной заменой является использование CTE для замены GetAncestor и GetDescendant и их рекурсивное использование.
Вот пример (с использованием иерархии меню):
WITH MenuCTE(MenuKey, ParentMenuKey, MenuName) AS
(
-- Anchor Query
SELECT MenuKey, ParentMenuKey, MenuName FROM Menu WHERE MenuKey = 1
UNION ALL
-- Recursive Query
SELECT m.MenuKey, m.ParentMenuKey, m.MenuName FROM Menu m
INNER JOIN MenuCTE r ON m.ParentMenuKey = r.MenuKey
)
SELECT MenuKey, ParentMenuKey, MenuName FROM MenuCTE
Эта статья должна помочь (примеротсюда):
http://www.infoq.com/news/2007/10/CTE