2010-02-20 32 views

回答

1

您可以动态更改每个查询的获取模式。

IList cats = sess.CreateCriteria(typeof(Cat)) 
    .Add(Expression.Like("Name", "Fritz%")) 
    .SetFetchMode("Mate", FetchMode.Eager) 
    .SetFetchMode("Kittens", FetchMode.Eager) 
    .List(); 

请参阅documentation的第12.5节。

+0

是否有一个隐藏ICriteria API的BestPractice,因为我不想在UI层使用这个API?我应该为我的repository.GetAll方法创建一个重载还是有其他一些建议? – Rookian 2010-02-21 12:01:54

+0

我不确定你的意思。如果您担心如何在UI中提供查询功能,请查看http://jnb.ociweb.com/jnb/jnbNov2003.html中的“包装查询API”。否则,一般来说,UI层取决于依赖于数据访问层的业务层,而nhibernate的东西通常位于数据访问层。 – ewernli 2010-02-21 12:55:12

+0

我现在只是重写我的GetAll方法。我不喜欢那些丑陋的字符串,我想我会为此写一个辅助类。非常感谢。 – Rookian 2010-02-22 09:52:31

1

对于查询 - 是:)

+0

你能给我更多的细节吗? – Rookian 2010-02-20 16:12:13

+0

以下是来自Ayende的很好的解释:http://ayende.com/Blog/archive/2010/01/16/eagerly-loading-entity-associations-efficiently-with-nhibernate.aspx(HQL)。 ICriteria您从@ewernli获得的示例。 – dariol 2010-02-20 18:30:57