IDbSet und Freilegen Include-Methode über Erweiterung die Methode
Ich bin mit dem Code-First-Ansatz mit EF und ich wollte IDbSet statt DbSet damit ich tun konnte, Unit-Testen mit mocks. Mein problem ist, ich benutze die Include () - Methode für eager loading, wo notwendig, aber Include() nicht ausgesetzt über IDbSet. Ich sah ein Beispiel-code unter Verwendung einer extension-Methode zu setzen Include (), aber es scheint nicht für mich arbeiten; das objectQuery-Objekt in diesem Beispiel immer null ist. Bitte lassen Sie mich wissen, wie dieses Problem zu beheben.
public static class IQueryableExtension
{
public static IQueryable<T> Include<T>(this IQueryable<T> source, string path)
where T : class
{
ObjectQuery<T> objectQuery = source as ObjectQuery<T>;
if (objectQuery != null)
{
return objectQuery.Include(path);
}
return source;
}
public static IQueryable<T> Include<T, TProperty>(this IQueryable<T> source,
System.Linq.Expressions.Expression<Func<T, TProperty>> path)
where T : class
{
ObjectQuery<T> objectQuery = source as ObjectQuery<T>;
if (objectQuery != null)
{
return source.Include(path);
}
return source;
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht zu schreiben, wie die Erweiterung, wenn Sie mit CTP5. CTP5 bietet
Include
Erweiterung fürIQueryable
. Sie verweisen müssen EntityFramework.dll (CTP5) und fügen Sie hinzu:Deine version wahrscheinlich nicht funktionieren, da Ihre Umwandlung von der Quelle zum
ObjectQuery
aber es wird vermutlich von TypDbQuery
.Stellen Sie sicher, Sie haben die Eigenschaft, die
using
Aussagen enthalten, die über die statische Klasse. Einfache copy/paste aus deinem code führt IDbSet aussetzen, die gehören Methoden, wenn auf den entsprechenden namespace.