我對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