NHibernate Многоразовый QueryOver - PullRequest
4 голосов
/ 12 января 2011

Чтобы сохранить свои запросы автономными и потенциально многократно используемыми, я обычно делал это в NH2:

public class FeaturedCarFinder : DetachedCriteria
{
    public FeaturedCarFinder(int maxResults) : base(typeof(Car))
    {
        Add(Restrictions.Eq("IsFeatured", true));
        SetMaxResults(maxResults);
        SetProjection(BuildProjections());
        SetResultTransformer(typeof(CarViewModelMessage));
    }
}

Я бы хотел использовать QueryOver сейчас, когда перешел на NH3, ноя не уверен, как сделать выше, используя QueryOver?

1 Ответ

6 голосов
/ 12 января 2011

Кто-то из списка пользователей NH дал мне ответ:

public class FeaturedCarFinder : QueryOver<Car, Car> 
{ 
    public FeaturedCarFinder(int maxResults) 
    { 
        Where(c => c.IsFeatured); 
        Take(maxResults); 
        BuildProjections(); 
        TransformUsing(Transformers.AliasToBean(typeof(CarViewModelMessage))); 
    } 
    private void BuildProjections() 
    { 
        SelectList(l => 
            l.Select(c => c.IsFeatured) 
            //... 
            ); 
    } 
} 

Очень похоже на использование DetachedCriteria в качестве базового класса, но обратите внимание на использование QueryOver (т.е. версия с двумя аргументами типа) вместопросто QueryOver в качестве базового класса.

...