Nhibernate заказ по свойству другого класса - PullRequest
0 голосов
/ 03 января 2012

Я задал вопрос несколько дней назад Мой предыдущий вопрос .Таким образом, мой вопрос состоял в том, как упорядочить свойство правильного и четкого списка объектов.В то время я пытался добиться этого с помощью QueryOver, но сейчас я использую Criterea API.И у меня снова равные рекорды.Это моя критика

var lst = 
    Session.CreateCriteria<News>().CreateAlias("Category", "c").AddOrder(Order.Asc("c.Name")).
      SetFirstResult(pageSize * pageNumber).SetMaxResults(pageSize).List<News>();

, если я пытаюсь добавить отчетливую проекцию, я ничего не получаю.Просто исключение Unable to perform find[SQL: SQL not available].

var lst =
    Session.CreateCriteria<News>().SetProjection(Projections.Distinct(Projections.Id())).CreateAlias("Category", "c").AddOrder(Order.Asc("c.Name")).
      SetFirstResult(pageSize * pageNumber).SetMaxResults(pageSize).List<News>();

Классы

public class News
{
    public virtual int Id { get; protected set; }
    public virtual string Topic { get; set; }
    public virtual Category Category { get; set; }
}

public class Category
{
     public virtual int Id { get; protected set; }
     public virtual string Name { get; set; }
     public virtual ISet<News> News { get; set; }
}

И отображения

 <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="News" namespace="NewsManagement.Models">
     <class name="News" table="News">
        <id name="Id">
             <generator class="native" />
         </id>
         <property name="Date" not-null="true" />
         <many-to-one name="Category" fetch="join" column="CategoryId" class="Category, NHibernateManyToOne" not-null="true"/>
     </class>
 </hibernate-mapping>

 <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="News" namespace="NewsManagement.Models">
     <class name="Category" table="Categories">
         <id name="Id" column="Id">
             <generator class="native" />
         </id>
         <set name="News" fetch="join" cascade="all-delete-orphan">
             <key column="CategoryId" />
             <one-to-many class="News, NHibernateOneToMany" /> 
         </set>
     </class>
 </hibernate-mapping>

Если нет способа получить то, что мне нужно, с помощью API criterea,Как я могу достичь необходимой функциональности?И это очень важно , что мне нужно получить отличный результат от базы, а не отличить его от клиента.

1 Ответ

0 голосов
/ 04 января 2012

Если вы хотите получить заказ по c.Name, вам нужно использовать NHibernate DTO и добавить проекцию для c.Name.

Поскольку порядок по столбцу должен присутствовать в элементе select запроса.

http://www.junasoftware.com/blog/nhibernate-setresulttransformer-and-dto.aspx

http://elegantcode.com/2007/10/30/nhibernate-projections/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...