通过扩展方法IDbSet和Exposing Include方法

ena*_*rik 17 code-first entity-framework-4 asp.net-mvc-3

我使用EF的Code-First方法,我想使用IDbSet而不是DbSet,所以我可以使用模拟进行单元测试.我的问题是我在必要时使用Include()方法进行急切加载,但是不通过IDbSet公开Include().我看到一个示例代码使用扩展方法来公开Include(),但它似乎对我不起作用; 此示例中的objectQuery对象始终为null.请让我知道如何解决这个问题.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Lad*_*nka 28

如果您使用的是CTP5,则无需编写此类扩展.CTP5提供 Include扩展IQueryable.你必须引用EntityFramework.dll(CTP5)并添加:

using System.Data.Entity;
Run Code Online (Sandbox Code Playgroud)

您的版本可能不起作用,因为您正在将源转换为,ObjectQuery但它很可能是类型DbQuery.