我可以将NHibernate的默认“OrderBy”设置为“CreatedDate”而不是“Id”吗?

时间:2010-04-27 15:30:39

标签: sql nhibernate

我认为这是一个奇怪的问题。

除非我在我的HQL或Criteria中设置OrderBy,否则我可以让NHibernate默认要求SQL按CreatedDate排序数据吗?我很想知道这种类型是否可以在DB级别完成,以避免引入LINQ。

原因是我使用GUID作为ID,当我做这样的事情时:

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

获取所有的lineItem,它们以任意方式返回SQL对该提取进行排序,我认为这是GUID。在某些时候,我会在我的订单项中添加序数,但就目前而言,我只想使用CreatedDate作为排序条件。我不想被迫做:

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

然后编写该方法以按CreatedDate排序。我想如果默认情况下所有内容都只是在CreatedDate上排序,那就没问题了,除非另有特别要求。

2 个答案:

答案 0 :(得分:1)

您不需要编写方法来进行排序,只需使用LINQ的OrderBy扩展方法:

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

您可以在数据库中的CreatedDate上放置聚集索引,然后您可能会按此顺序获取记录,但您绝对不应该依赖它。

答案 1 :(得分:0)

不,你不能。最好的解决方案(正如您在评论中提到的那样)是设置order-by attribute in the collection mapping。请注意,该值应设置为数据库列名称,而不是属性名称。