2010-04-27 136 views
2

這是一個古怪的問題,我想。我可以將NHibernate的默認「OrderBy」設置爲「CreatedDate」而不是「Id」嗎?

除非我在HQL或Criteria中設置OrderBy,否則我可以通過默認方式讓NHibernate要求SQL通過CreatedDate對數據進行排序嗎?我很想知道這種排序是否可以在數據庫級完成,以避免引入LINQ。

的原因是,我使用的GUID對於IDS,當我做這樣的事情:

Sheet sheet = sheetRepository.Get(_someGUID); 
IList<SheetLineItems> lineItems = sheet.LineItems; 

來獲取所有了LineItem的,他們回來的任何武斷的方式,SQL排序,取指,這是我圖是GUID。在某些時候,我會將序號添加到我的訂單項中,但現在,我只想使用CreatedDate作爲排序標準。我不想被迫做:

IList<SheetLineItem> lineItems = sheetLineItemRepository.GetAll(_sheetGUID); 

然後寫這個方法來按照CreatedDate進行排序。我想如果一切都按默認排序在CreatedDate上,那很好,除非特別要求否則。

+0

丹尼爾Renshaw(作爲另一個問題的答案的一部分)建議在這裏使用NHibernate包裝上的order-by屬性(http://stackoverflow.com/questions/2723774/for-sql-select-returning-more-than-1 - 值 - 如何 - 都 - 它們排序,當-ID-是全局唯一標識符)。我認爲這是恰當的,所以我想我會留在這裏讓其他人閱讀爲可能的解決方案。 – 2010-04-27 19:17:43

回答

1

你並不需要寫一個方法來進行排序,只需使用LINQ的排序依據擴展方法:

sheetLineItemRepository.GetAll(_sheetGUID).OrderBy(x => x.CreatedDate); 

你可以把一個聚集索引上CreatedDate在數據庫中,那麼你可能會得到記錄按照這個順序,但你絕對不應該依賴它。

+0

或'IEnumerable lineItems = sheet.LineItems.OrderBy(x => x.CreatedDate);' – 2010-04-27 15:40:34

+0

@Mark我也想到了LINQ技術,只是希望避免使用它並讓DB去做爲了我。 @Martinho是的,我實際上正在做你現在寫的東西,但是我認爲我應該問社區是否有更好的方式讓DB去爲我做。 – 2010-04-27 15:41:31

+0

@Chris:你可以在問題中更明確地說明這個部分(可以/應該由DB/NHibernate爲我做?)。我會對答案感興趣。 – 2010-04-27 15:45:11

相關問題