Dans notre application, nous utilisons NH2 avec NHibernate.Linq. Nous voulons passer à la dernière version! J'ai donc lu que depuis NH3, la fonctionnalité Linq est «incorporée» dans l'assemblage NH.Comment remplir les références dans l'entité avec NHibernate? Plus de INHibernateQueryable
Maintenant; J'ai installé NH4 mais notre base de code doit aussi être mise à niveau.
Dans notre implémentation -NH2, nous avons utilisé:
/// <summary>
/// Gets an <see cref="IQueryable{T}"/> of entities.
/// </summary>
/// <returns>An <see cref="IQueryable{T}"/> of entities.</returns>
public virtual IQueryable<T> GetQueryable() {
return this.Session.Linq<T>();
}
En NH4 c'est/sera/doit être:
/// <summary>
/// Gets an <see cref="IQueryable{T}"/> of entities.
/// </summary>
/// <returns>An <see cref="IQueryable{T}"/> of entities.</returns>
public virtual IQueryable<T> GetQueryable() {
return this.Session.Query<T>();
}
Nous avons une méthode d'extension pour ajouter le chargement impatient:
/// <summary>
/// Adds eager-loading for <paramref name="alias"/>.
/// </summary>
/// <typeparam name="T">Queryable type.</typeparam>
/// <param name="source">A queryable.</param>
/// <param name="alias">An expression that tells what to eager load.</param>
/// <returns>A queryable.</returns>
public static IQueryable<T> Expand<T>(this IQueryable<T> source, Expression<Func<T, object>> alias)
{
var nhQueryable = source as INHibernateQueryable;
if (nhQueryable != null)
{
nhQueryable.QueryOptions.AddExpansion(ExpressionProcessor.FindMemberExpression(alias.Body));
}
return source;
}
En NH4 (.Linq) il n'y a plus INHibernateQueryable
, mais comment puis-je transformer ce code pour qu'il fonctionne h NHibernate 4 comme il l'habitude de ...?
Nous utilisons Linq pour écrire nos requêtes.
Merci! Finalement, j'ai décidé d'opter pour 'QueryOver' parce que cela me permet de mieux chaîner 'Fetch' avec plusieurs éléments enfants sur l'objet racine + transformation de résultat. En plus de cette écriture: Les méthodes d'extension pour le processus de migration sont plus faciles, basées simplement sur le type 'IQueryOver <>' – 321X