NHibernate 3 пути извлечения на основе строки? - PullRequest
1 голос
/ 04 мая 2011

Я пытаюсь реализовать интерфейс DAO с реализацией NHibernate. Интерфейс требует предоставления метода, подобного Fetch, со следующей подписью:

IQueryable<TEntity> AllIncluding(params string[] properties);

Эквивалентная реализация EntityFramework проста, поскольку у них есть метод расширения Include (string prop), но я не вижу ничего подобного ни в QueryOver, ни в NHIbernate LINQ; просто метод Fetch, который принимает Func. Есть идеи, как решить эту проблему?

Спасибо

Ответы [ 2 ]

4 голосов
/ 04 мая 2011

Вы пробовали что-то вроде?

session.QueryOver<Product>()
    .UnderlyingCriteria.SetFetchMode("PropertyName", FetchMode.Eager);

Как я понимаю, QueryOver - это просто оболочка для Criteria, и у Criteria есть также нетипизированная / строковая версия установки режима выборки.

Обновление

Итак, ваш метод может выглядеть следующим образом:

public IQueryOver<TEntity, TEntity> AllIncluding(params string[] properties)
{
    var queryOver = session.QueryOver<TEntity>();
    var criteria = queryOver.UnderlyingCriteria;

    foreach (var property in properties)
    {
        criteria.SetFetchMode(property, FetchMode.Eager);
    }

    return queryOver;
}
1 голос
/ 23 октября 2013

Просто для удобства заболел пост и расширение версии метода Мелиги, представленного в его решении

public static class QueryOverExtensions
{        
    public static IQueryOver<T, T> AllIncluding<T>(this IQueryOver<T, T> source, params string[] properties)
    {
        var criteria = source.UnderlyingCriteria;
        foreach (var property in properties)
        {
            criteria.SetFetchMode(property, FetchMode.Eager);
        }
        return source;
    }
}

теперь вы можете вызывать метод следующим образом:

queryOver.AllIncluding<TEntity>("property").where(...);
...