2009-07-28 2 views
6

Я ленивую загрузку коллекций, а также потому, что в таблице человека столько полей, я пишу функцию проецирования для извлечения только определенных свойств. Он работает со свойствами, а не с коллекциями других объектов. Я был бы в порядке, если бы они были загружены в качестве прокси, и я мог бы получить их позже, но сейчас он просто загружается в нуль.Как использовать проекции NHibernate для извлечения коллекции

public IList<Person> ListTop40() 
     { 
      var list = _session.CreateCriteria(typeof(Person)) 
        .SetProjection(Projections.ProjectionList() 
        .Add(Projections.Property("FirstName")) 
        .Add(Projections.Property("LastName")) 
        .Add(Projections.Property("Jersey")) 
        .Add(Projections.Property("FortyYard")) 
        .Add(Projections.Property("BenchReps")) 
        .Add(Projections.Property("VertJump")) 
        .Add(Projections.Property("ProShuttle")) 
        .Add(Projections.Property("LongJump")) 
        .Add(Projections.Property("PersonSchoolCollection")) 
        ) 
        .List<IList>() 
        .Select(l => new Person() { FirstName = (string)l[0], LastName = (string)l[1], Jersey = (Decimal)l[2], FortyYard = (Decimal)l[3], BenchReps = (Decimal)l[4], VertJump = (Decimal)l[5], ProShuttle = (Decimal)l[6], LongJump = (Decimal)l[7], PersonSchoolCollection = (IList<Person_School>)l[8]}); 

      IList<Person> s = list.ToList(); 
      return s; 
     } 

ответ

1

Сколько продуктов у вас есть? У меня около 30, возможно, больше на объекте клиента, и при загрузке в NH нет проблем.

Возможно, вы беспокоитесь о производительности, когда это не так. (Старый: преждевременной оптимизации является корень всех зол»:))

Имея, что сказал - я сомневаюсь, что что-то вроде этого поддерживается

+0

У меня есть около 80 свойств, поэтому в этой ситуации это действительно необходимо. Я уверен, что не могу получить его с помощью этого кода, но я думаю, что есть какой-то способ, с помощью которого проекции могут извлекать только 1 из многих коллекций. – luke

+0

в этом случае у вас может быть больше удачи в группе nhusers в группах google – sirrocco

+0

У меня есть он отправлен туда. Если я получу ответ, то плохой пост здесь. Благодарю. – luke

2

попробуйте использовать AliasToBeanResultTransformer:.

var list = _session.CreateCriteria(typeof(Person)) 
       .SetProjection(Projections.ProjectionList() 
       .Add(Projections.Property("FirstName")) 
       .Add(Projections.Property("LastName")) 
       .Add(Projections.Property("Jersey")) 
       .Add(Projections.Property("FortyYard")) 
       .Add(Projections.Property("BenchReps")) 
       .Add(Projections.Property("VertJump")) 
       .Add(Projections.Property("ProShuttle")) 
       .Add(Projections.Property("LongJump")) 
       .Add(Projections.Property("PersonSchoolCollection")) 
       ) 
       .SetResultTransformer(new NHibernate.Transform.AliasToBeanResultTransformer(typeof(Person))) 
       .List<Person>(); 
Смежные вопросы