我对EF使用Code-First方法,并且我想使用IDbSet而不是DbSet,因此我可以使用mocks进行单元测试。我的问题是我在必要时使用Include()方法进行加载,但Include()不通过IDbSet公开。我看到一个示例代码使用扩展方法来公开Include(),但它似乎不适用于我;此示例中的objectQuery对象始终为空。请让我知道如何解决这个问题。通过扩展方法IDbSet和公开包含方法
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;
}
}
我一开始并没有明白你的意思。但后来我意识到我需要在使用Include()编写linq语句(services类)的文件上使用using语句,而不仅仅是在创建我的DbContext(session.cs)的文件上。谢谢!!! – enamrik 2011-02-09 21:34:45