2012-04-08 30 views
0
public class Category 
{ 
    public virtual int Id { set; get; } 
    public virtual string Name { set; get; } 
    public virtual int CategoryOrder { set; get; } 
    public virtual IEnumerable<News> LatestNews { set; get; } 
} 

public sealed class CategoryMap :ClassMap<Category> 
{ 

    public CategoryMap() 
    { 
     LazyLoad(); 
     Id(x => x.Id); 
     Map(x => x.Name); 
     Map(x => x.CategoryOrder); 
     HasMany(x => x.LatestNews); 
    } 

} 

     IRepository<Category> newsRepo = new NHibernateRepository<Category>(); 

     using(var session = newsRepo.GetSessionFactory().OpenSession()) 
     using(var transaction = session.BeginTransaction()) 
     { 
      var result = session.Query<Category>().OrderBy(x => x.CategoryOrder); 
      transaction.Commit(); 
     } 

我有這個類的類我想要顯示一個(只有一個)每個類別的新聞。這是正確的映射?或者我應該改爲MapHasMany映射但得到一個元素或得到一些

當我運行這個,它得到所有新聞每個類別。但我想每個類別的最新消息(只有一個)。我可以通過查詢News.DateUpdated獲得最新消息。

我應該如何更改查詢來獲得每個類別的新聞?

或我如何獲得一些新聞?即:限制我可以查詢的新聞數量?

回答

0

我想你可以吃你的蛋糕,也可以吃它。你有一個新聞項目的清單,所以只要離開。但添加另一個屬性,只需獲取您想要的新聞項目。

public class Category 
{ 
    public virtual int Id { set; get; } 
    public virtual string Name { set; get; } 
    public virtual int CategoryOrder { set; get; } 
    public virtual IEnumerable<News> AllNews { set; get; } 
    public virtual News LatestNews 
    { 
     get 
     { 
      // probably needs some work 
      return this.AllNews.OrderByDescending(n => n.SomeDateField).Take(1); 
     } 
    } 
} 

public sealed class CategoryMap :ClassMap<Category> 
{ 

    public CategoryMap() 
    { 
     LazyLoad(); 
     Id(x => x.Id); 
     Map(x => x.Name); 
     Map(x => x.CategoryOrder); 
     HasMany(x => x.AllNews); 
    } 

} 
0

可以使用懶人模式額外要實現這一目標,

public News GetLatestNews(Category cat) 
{ 
    var session = SessionFactory.CurrentSession; 
    var news = session.CreateFilter(cat.LatestNews , "order by categoryorder").SetFirstResult((page - 1) * pageSize).SetFirstResult(0).SetMaxResults(1).List().FirstOrDefault(); 

    return news; 
} 

但是如果你嘗試直接訪問辦事指南收集,這不會有任何用處的,因爲它會加載所有與之相關聯的消息對象從數據庫分類會降低性能。