J'ai ajouté la méthode d'extension suivanteDbSet inclure la méthode boucle
/// <summary>
/// Provides a statically typed interface for db includes
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="set">The set.</param>
/// <param name="includes">The includes.</param>
/// <returns>DbSet<T>.</returns>
public static DbSet<T> Include<T>(this DbSet<T> set, params Expression<Func<T, object>>[] includes) where T : class
{
if (includes != null)
{
foreach (var expression in includes)
{
set.Include(expression);
}
}
return set;
}
Ceci est basé sur le code référentiel je trouve ici
https://github.com/carbonrobot/FullStackEF/tree/master/src
extension Cependant, quand j'utiliser cela avec la suivant
public ServiceResponse<Town> Get(int id)
{
Func<Patient> func = delegate
{
using (var context = _contextFactory())
{
return context.Get<Town>(id, x => x.County);
}
};
return this.Execute(func);
}
Lorsque la classe de la ville contient un comté en tité.
Je reçois une boucle infinie en appelant la méthode d'extension plutôt que la base incluse?
Des idées de ce que je fais mal ici?
merci pour l'explication détaillée. Une question cependant que le repo utilise le DbSet retourné pour enchaîner les méthodes. ie.include (includes) .find (id) Comme la méthode d'extension est return IQueryable (par opposition à DbSet Je perds la capacité d'enchaîner? des idées avec ceci? –
Hmm, cela semble insoluble, mais 'Include' doesn ' t fonctionne avec 'Find' de toute façon, donc je suppose que cela n'a aucun sens d'être enchaîné avec' Find' Les chaînes régulières de LINQ devraient fonctionner, mais la raison en est que le résultat de 'Include' n'est plus' DbSet' –
Ok Donc, fondamentalement, vous recommandez simplement .include (includes) .select (x => x.Id == id); (par rapport à l'exemple de recherche) .Pour filtrer les résultats interrogeables? –