Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

NHibernate QueryOver e MYSQL


Eu esperaria que isso fosse uma ligação de sentido único (apenas para leitura). Nesse cenário, você pode lucrar com as Projeções. veja mais aqui 16.6. Projeções

Você pode criar algum objeto DTO para sua grade e semelhante à documentação:
CatSummary summaryDto = null;
IList<CatSummary> catReport =
    session.QueryOver<Cat>()
        .SelectList(list => list
            .SelectGroup(c => c.Name).WithAlias(() => summaryDto.Name)
            .SelectAvg(c => c.Age).WithAlias(() => summaryDto.AverageAge))
        .TransformUsing(Transformers.AliasToBean<CatSummary>())
        .List<CatSummary>();

Você deve ser capaz de fazer assim (Não posso verificar agora, mas deve estar claro)
LietadloDTO lietadloDTO = null;
dgv.DataSource = session
  .QueryOver<Lietadlo>(() => f)
  .JoinAlias(() => f.Spolocnostt_Id,() => t)
  .JoinAlias(() => f.Typp_Id, ()=> r)
  .Where(() => t.Pocetlietadiel > 2)
  .And(() => r.Name == "Boeing-747")
  .SelectList(list => list
    .Select(f => f.Id).WithAlias(() => lietadloDTO.Id)
    .Select(t => t.Name).WithAlias(() => lietadloDTO.Name)
    ...
    )
  .TransformUsing(Transformers.AliasToBean<LietadloDTO>())
  .List<LietadloDTO>()
  .ToList<LietadloDTO>();

Portanto, neste caso, você forçará o NHibernate a criar Projection (apenas 1 cláusula SELECT) e retornará todos os dados necessários de uma só vez