Linq或QueryOver將成爲您最乾淨的解決方案。如果你決定留在ICriteria中,你可能會想要將你的每個實體都包裝在一個擁有通用粗粒方法的類中,這也使得你的代碼訪問變得很普通,所以代碼糾正在一個地方完成,而不是在文件或類。
Theres大量的項目在http://nhforge.org/wikis/general/open-source-project-ecosystem.aspx它可以幫助你。我知道NhGen(http://sourceforge.net/projects/nhgen/)基於NHibernate.Burrows GenericDao類爲每個實體創建了一個CRUD類,並帶有一些CRUD方法。它負責所有的別名和連接,以便查詢成爲
IMessageDao messageDao = new MessageDao();
// Get All
IList<IMessage> messageList1 dao.FindAll();
// Find using QueryByExample
IList<IMessage> messageList2 = dao.FindByExample(messageDetails, orderBy)).ToList();
// Find using a simple entity query
IList<IMessage> messageList3 = messageDao.Find(new [] { Restrictions.Le(MessageHelper.Columns.Date, dateLastChecked) });
// Find using a join and a query on said joined entities
IList<IMessage> messageList4 = messageDao.Find
(new []
{
Restrictions.Le(MessageHelper.Columns.Date, dateLastChecked),
Restrictions.Eq(MessageHelper.Columns.IsActive, true))
}, new[]
{
Restrictions.Eq(CategoryHelper.KeyColumns.Rsn, categoryRsn),
Restrictions.Eq(CategoryHelper.Columns.IsActive, true))
}, new []
{
Restrictions.Eq(ChannelHelper.KeyColumns.Rsn, channelRsn),
Restrictions.Eq(ChannelHelper.Columns.IsActive, true))
}
);
theres大量那樣簡單
覆蓋的,所以你可以指定你的連接類型或它自然假設內連接。
如何使用NHibernate的強類型化/流暢LINQ而不是有時候遮擋的Criteria API? http://bit.ly/d5xwIB – rebelliard 2010-07-29 12:28:08
如果沒有看到映射,就不能說太多... – dotjoe 2010-07-29 20:34:47