2009-07-27 1 views
0

Я пытаюсь создать запрос с помощью NHibernate и поиск по нескольким внешних ключей:Как использовать сессию NHibernate.Criteria с несколькими внешними ключами?

Следующий код работает, когда я только поиск на одном из внешних ключей:

  ICriteria query = Session.CreateCriteria<TblTeam>() 
      .Add<TblTeam>(x => x.FldUrlSafeName == teamName) 
      .CreateCriteria<TblTeam>(x => x.TblSportsType) 
      .Add<TblSportsType>(x => x.FldUrlSafeName == sportsType); 


     return query.UniqueResult<TblTeam>(); 

мне нужно поиск на двух внешних ключей, так что я создал следующее:

  ICriteria query = Session.CreateCriteria<TblTeam>() 
      .Add<TblTeam>(x => x.FldUrlSafeName == teamName) 
      .CreateCriteria<TblTeam>(x => x.TblSportsType) 
      .Add<TblSportsType>(x => x.FldUrlSafeName == sportsType) 
      .CreateCriteria<TblTeam>(x => x.TblSportsOrganization) 
      .Add<TblSportsOrganization>(x => x.FldUrlSafeName == sportsOrganization); 

     return query.UniqueResult<TblTeam>(); 

к сожалению, это дает мне следующую ошибку:

"не удалось устранить свойство: TblSportsOrganization of: site.Core.TblSportsType"

Как бы мне это сделать, чтобы «отступить», так что я могу добавить критерии к TblTeam, а не TblSportsType?

ответ

1

После разговора с некоторыми людьми в IRC я ​​нашел ответ. Вы должны придерживаться ссылки на оригинальную ICriteria. Это должно было быть очевидно.

  ICriteria query = Session.CreateCriteria<TblTeam>(); 
     query.Add<TblTeam>(x => x.FldUrlSafeName == teamName); 

     query.CreateCriteria<TblTeam>(x => x.TblSportsType) 
      .Add<TblSportsType>(x => x.FldUrlSafeName == sportsType); 

     query.CreateCriteria<TblTeam>(x => x.TblSportsOrganization) 
      .Add<TblSportsOrganization>(x => x.FldUrlSafeName == sportsOrganization); 

     return query.UniqueResult<TblTeam>();