2009-09-04 6 views
3

Мне было интересно, может ли кто-нибудь помочь с примером критериев для nhibernate. Я думаю, что у меня есть голова вокруг довольно простых вещей, таких как поиск записей в заданной таблице, где поле соответствует определенному значению и т. Д. Где я сейчас спотыкаюсь, где у вас есть таблица с внешним ключом для другой таблицы и пытаясь найти строки из первой таблицы на основе некоторого поля во второй таблице.Критерии построения nhibernate

В качестве примера ...

Если у меня есть

tblUser 
pk int ID 
    int CompanyID 
    string Name 

и

tblCompany 
pk int  ID 
    string CompanyName 

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

Любые примеры woudl be awesome.

ответ

10

Характеристика не может смотреть на подсвойствах напрямую, так что если вы хотите получить доступ к суб-свойству необходимо использовать псевдоним

session.CreateCriteria<User>() 
    .CreateAlias("Company", "c") //the first argument is the property name from User 
    .Add(Restrictions.Eq("c.Name", companyName)) 
    .List<User>(); 

Кроме того, такие же ограничение на вложенных свойствах существует для псевдонимов, так что если у вас пользователь -> о компании -> Владелец вам потребуется два псевдоним

.CreateAlias("Company", "c") 
.CreateAlias("c.Owner", "o") 

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

session.CreateCriteria<User>("u") 
    .CreateAlias("u.Company", "c") 
    .Add(Restrictions.Eq("c.Name", companyName)) 
    .List<User>(); 
+1

Ты мой человек, чемпион, отлично работал. – Adam

+0

Спасибо за ответ, KeeperOfTheSoul! Ты спас меня некоторое время. Хорошо, что ты не здесь со мной, потому что я, вероятно, пять раз с тобой так сильно, что твои руки будут хвататься за предплечья и мальчика, что было бы беспорядок для очистки. Еще раз, спасибо за помощь! – SquidScareMe

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