2015-05-23 2 views
0

Я хочу получить с нетерпением весь уровень вспомогательных объектов до тех пор, пока не будет отсчитывать 0, но это возвращает мне только первый уровень.Получение бесконечного подкласса с помощью SetFetchMode FetchMode.Eager

в этой схеме Я не могу загрузиться с нетерпением D и F, например;

A 
|_B 
| |_D 
| |_F 
|_C 
|_E 
|_G 

public class Foo 
{ 
    public virtual int FooId { get; set; } 
    public virtual IList<Foo> Children { get; set; } 
    public virtual Foo Parent { get; set; } 
} 

using (var session = NHibernateHelper.OpenSession()) 
{ 
    var CC = session.CreateCriteria(typeof(Foo)); 
    CC.SetFetchMode("Children", FetchMode.Eager); 
    return CC.List<Foo>(); 
} 
+1

* Считаете ли вы, что загрузить структуру вручную? За один раз загрузите все FOO и на C# (сервер приложений), итератируйте их и создайте вложенность? Должен сказать, что это работает лучше всего для нас при перемещении данных в UI ... для древовидных структур (с разумным/ограниченным размером) * –

+0

да, я пытался это сделать, но просто надеялся, что есть более простой способ сделать это:) – Mert

ответ

0

Я знаю, что вы используете критерии, но с Linq вы делаете это так:

using (var session = NHibernateHelper.OpenSession()) 
{ 
    return session.Query<Foo>() 
       .Fetch(x => x.B) 
       .ThenFetch(x => x.D) 
       .Fetch(x => x.B) 
       .ThenFetch(x => x.F) 
       .Fetch(x => x.C) 
       .Fetch(x => x.E) 
       .Fetch(x => x.G) 
       .ToList(); 
} 

Но в зависимости от того, как DataModel выглядит это не может быть лучшим способом производительность повышается.

Смежные вопросы