Имам следния клас
public class Category
{
public virtual int ID { get; set; }
public virtual string Name { get; set; }
public virtual int? ParentID { get; set; }
public virtual IList<Category> Children { get; set; }
}
Картографирам таблица на база данни със самореферираща връзка с външен ключ с полета id, име и родителски id към този клас, използвайки Nhibernate (въпреки че това може да е рамката на обекта, orm всъщност няма значение).
Като се има предвид всяка категория, имам нужда от метод/заявка, която ми дава категория parentid, grandparentid и т.н. Мисля, че един от начините да го направя е да използвам метод, който работи рекурсивно, извличайки последователни parentid и спирайки, когато удари нулев parentid. Най-доброто, което съм измислил досега, е да направя нещо подобно на
newcategory = Load<Category>(category.parentId)
add newcategoryid to list
category = newcategory
repeat until category.parentid is null
Но се чудех дали може да има проблеми с производителността с нещо подобно, тъй като може да включва многобройни пътувания до базата данни.