实体框架和存储库模式问题

Luk*_*Led 6 entity-framework repository-pattern

我使用通用存储库模式与方法:

    private ObjectQuery<T> ObjectQueryList()
    {
        var list = CamelTrapEntities.CreateQuery<T>(EntitySetName);
        return list;
    }
Run Code Online (Sandbox Code Playgroud)

    public IQueryable<T> List()
    {
        return ObjectQueryList();
    }
Run Code Online (Sandbox Code Playgroud)

    public static IQueryable<T> Include<T>(this IQueryable<T> obj, string path)
    {
        if (obj is ObjectQuery<T>)
            (obj as ObjectQuery<T>).Include(path);

        return obj;
    }
Run Code Online (Sandbox Code Playgroud)

    public ObjectQuery<T> List()
    {
        return ObjectQueryList();
    }
Run Code Online (Sandbox Code Playgroud)

    private ObjectQuery<T> ObjectQueryList()
    {
        var list = CamelTrapEntities.CreateQuery<T>(EntitySetName);
        return list;
    }
Run Code Online (Sandbox Code Playgroud)

    public IQueryable<T> List()
    {
        return ObjectQueryList();
    }
Run Code Online (Sandbox Code Playgroud)

    public static IQueryable<T> Include<T>(this IQueryable<T> obj, string path)
    {
        if (obj is ObjectQuery<T>)
            (obj as ObjectQuery<T>).Include(path);

        return obj;
    }
Run Code Online (Sandbox Code Playgroud)

一切正常.

我应该如何实现存储库模式以便能够执行更复杂的查询?

Luk*_*Led 6

反射器给了我一个答案:

public ObjectQuery<T> Include(string path)
{
    EntityUtil.CheckStringArgument(path, "path");
    return new ObjectQuery<T>(base.QueryState.Include<T>((ObjectQuery<T>) this, path));
}
Run Code Online (Sandbox Code Playgroud)

public static IQueryable<T> Include<T>(this IQueryable<T> obj, string path)
{
    if (obj is ObjectQuery<T>)
        return (obj as ObjectQuery<T>).Include(path);

    return obj;
}
Run Code Online (Sandbox Code Playgroud)

public ObjectQuery<T> Include(string path)
{
    EntityUtil.CheckStringArgument(path, "path");
    return new ObjectQuery<T>(base.QueryState.Include<T>((ObjectQuery<T>) this, path));
}
Run Code Online (Sandbox Code Playgroud)

解决了这个问题.几个小时的丢失,我更讨厌实体框架:)

这让我也意识到我应该使用Include参数创建另一个List函数,并且不允许包含外部存储库.