2011-07-12 12 views
21

tengo que escribir una consulta en Fluido NHibernate paraFluido NHibernate Dónde Cláusula

Select * from Users where UserName = 'Abcd' AND Password = '123456'

Cómo crear por encima de consulta con session.CreateCriteria

Respuesta

46

Fluido NHibernate es un marco Mapeo alternativa a los archivos de HBM por defecto (Hibernate Mapping)

NHibernate en sí ofrece diferentes API Consulta de como

  • HQL - Hibernate Consulta Idioma
  • Criterios
  • consultas - LINQ (Equivalente)
  • QueryOver - (Criterios inflexible)
  • SQL

Para los criterios de la consulta sería algo a lo largo del líneas de:

var users = session.CreateCriteria<Users>() 
        .Add(Restrictions.Eq("UserName", "Abcd")) 
        .Add(Restrictions.Eq("Password", "123456")) 
        .List<Users>(); 

Consulta:

var users = from u in session.Query<Users>() 
      where u.UserName == "Abcd" 
      && u.Password == "123456" 
      select u; 

o

var users = session.Query<Users>() 
        .Where(x => x.UserName == "Abcd" && u.Password == "123456"); 

QueryOver:

var users = session.QueryOver<Users>() 
        .Where(x => x.UserName == "Abcd") 
        .And(u.Password == "123456") 
        .List(); 
+0

gracias por la gran respuesta. ¿Puedo devolver un usuario como tipo en las consultas anteriores? – Saad

+1

@Saad - ¿Un único usuario? En lugar de una colección? Por supuesto. Puede ver 'SingleOrDefault()' en Query/QueryOver, en lugar de 'List()'. No estoy seguro de qué método llama en los Criterios para hacer un único resultado. No tiene Visual Studio a mano. – Phill

+0

gracias SingleOrDefault() trabajo para mí. – Saad

0

de consulta Durante

var users = session.QueryOver<Users>() 
        .Where(x => x.UserName == "Abcd" && x.Password == "123456") 
        .List(); 
Cuestiones relacionadas