2011-07-12 12 views
21

muszę napisać zapytanie w Fluent NHibernate dlaFluent NHibernate Gdzie Klauzula

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

Jak stworzyć powyżej zapytania z session.CreateCriteria

Odpowiedz

46

Fluent NHibernate jest alternatywą ramy Mapowanie do plików domyślny HBM (sam Hibernate Mapowanie)

NHibernate oferuje różne odpytywanie API jak

  • HQL - Hibernate Zapytania Język
  • Kryteria
  • Zapytanie - (LINQ odpowiednik)
  • QueryOver - (silnie wpisane kryteria)
  • SQL

przypadku kryteriów zapytanie byłoby coś wzdłuż linie:

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

Zapytanie:

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

lub

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

dzięki za wielki post. Czy mogę zwrócić użytkownika jako typ w powyższych zapytaniach? – Saad

+1

@Saad - Pojedynczy użytkownik? Zamiast kolekcji? Pewnie. Możesz spojrzeć na 'SingleOrDefault()' w Query/QueryOver, zamiast 'List()'. Nie jestem pewien, którą metodę wywołujesz w Kryteriach, aby wykonać pojedynczy wynik. Nie używaj Visual Studio pod ręką. – Phill

+0

dzięki SingleOrDefault() dla mnie. – Saad

0

Zapytanie Przez

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