J'ai un référentiel générique avec une méthode de requête qui renvoie IQueryable. Dans mon code d'appel que je peux faire quelque chose comme ceFluid Wrapper pour Nhibernate Fetch ThenFetch
_repository.Query<MyClass>(x=>x.EntityId == 1).Fetch(x=>x.MyClassChild).ToList()
Cependant, je serais alors incapable de tester le code d'appel (pour autant que je sache). Donc, je suis en train de faire ce qui suit
public class Repository : IRepository
{
....
public FetchedResult<TQueried, TRelated> ThenFetch<TQueried, TFetch, TRelated>(INhFetchRequest<TQueried, TFetch> query, Expression<Func<TFetch, TRelated>> relatedObjectSelector)
{
INhFetchRequest<TQueried, TRelated> nhFetchRequest = query.ThenFetch(relatedObjectSelector);
return new FetchedResult<TQueried, TRelated>(this, nhFetchRequest);
}
public FetchedResult<TOriginating, TRelated> Fetch<TOriginating, TRelated>(IQueryable<TOriginating> query, Expression<Func<TOriginating, TRelated>> relatedObjectSelector)
{
INhFetchRequest<TOriginating, TRelated> nhFetchRequest = query.Fetch(relatedObjectSelector);
return new FetchedResult<TOriginating, TRelated>(this, nhFetchRequest);
}
}
-
public class FetchedResult<TQueried, TRelated>
{
private readonly IRepository _repository;
private readonly INhFetchRequest<TQueried, TRelated> _query;
public FetchedResult(IRepository repository, INhFetchRequest<TQueried, TRelated> query)
{
_repository = repository;
_query = query;
}
public FetchedResult<TQueried, TRelated> ThenFetch<TFetch>(Expression<Func<TFetch,TRelated>> relatedObjectSelector)
{
return _repository.ThenFetch(_query, relatedObjectSelector);
}
}
Ainsi, le premier appel à Fetch œuvres, mais l'appel à repositor.ThenFetch prend une requête INhFetchRequest mais retourne un INhFetchRequest. Je ne peux donc pas utiliser FetchedResult pour appeler le ThenFetch une deuxième fois.
Je pense que c'est le problème. Mon cerveau est assez démêlé à ce stade. Si quelqu'un peut m'aider à le faire savoir, je peux essayer de donner plus d'informations ou de meilleures informations.
Maintenant, je sais que je peux le faire en utilisant cependant statics, mon objectif ici est de pouvoir se moquer des appels à récupérer.
Merci,
Raif