NHibernate 3或4是否等效于Entity Framework的“包含”方法,该方法采用字符串参数而不是llambda?我想在NHibernate中做这样的事情:

Contact contact =
        context.Contacts.Include("SalesOrderHeaders.SalesOrderDetails")
        .FirstOrDefault();


我从this post那里看到了这段代码,该代码在很酷的循环中使用“获取”,但这只处理作为主对象的第一级子对象的对象,而上述EF代码下降了2级,而无需非常严格型lambdas。

public IQueryable<T> All<T>(params Expression<Func<T, Object>> [] fetchPaths)
{
    var queryable = this.session.Query<T>();

    foreach (var fetchPath in fetchPaths)
    {
        queryable = queryable.Fetch(fetchPath);
    }

    return queryable;
}

最佳答案

NHibernate有第二种方法,称为ThenFetch。你将不得不写

this.session.Query<T>()
            .Fetch(x => x.Property)
            .ThenFetch(x => x.SubProperty);

10-07 13:58