C# 无法加载实体框架子实体

C# 无法加载实体框架子实体,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我已经实现了UnitOfWork风格的工作方法,而且我似乎无法在EntityFramework 6中强制加载。每次我使用“Include()”语法时,它似乎被忽略,生成的SQL不会执行任何形式的联接,这会导致生成大量SQL,因为每个子实体都必须在数据库中按其ID进行查询 这是我的设置: public class UnitOfWork : IUnitOfWork { private readonly SimpleStorageEntities _simpleStorageEntities;

我已经实现了UnitOfWork风格的工作方法,而且我似乎无法在EntityFramework 6中强制加载。每次我使用“Include()”语法时,它似乎被忽略,生成的SQL不会执行任何形式的联接,这会导致生成大量SQL,因为每个子实体都必须在数据库中按其ID进行查询

这是我的设置:

public class UnitOfWork : IUnitOfWork
{
    private readonly SimpleStorageEntities _simpleStorageEntities;

    public UnitOfWork()
    {
        _simpleStorageEntities = new SimpleStorageEntities();
    }

    public List<T> Query<T>(Expression<Func<T, bool>> predicate, params Expression<Func<T, object>>[] loadOptions) where T : class
    {
        var set = _simpleStorageEntities.Set<T>();

        if (loadOptions.Any())
        {
            foreach (var expression in loadOptions)
            {
                set.Include(expression);
            }
        }
        return set.Where(predicate).ToList();
    }
}
公共类UnitOfWork:IUnitOfWork
{
私人只读SimpleStorageEntities\u SimpleStorageEntities;
公共工作单元()
{
_simpleStorageEntities=新的simpleStorageEntities();
}
公共列表查询(表达式谓词,参数表达式[]加载选项),其中T:class
{
var set=_simplestrageentities.set();
if(loadOptions.Any())
{
foreach(loadOptions中的var表达式)
{
包括(表达);
}
}
返回集.Where(谓词).ToList();
}
}
我的发言如下:

var entries = _unitOfWork.Query<Entry>(e => e.TableId == tableId,
            e => e.AttributeValues);
var entries=\u unitOfWork.Query(e=>e.TableId==TableId,
e=>e.AttributeValues);
尽管我已经指定要加载AttributeValue,但每次通过foreach访问AttributeValue时,都会进行数据库调用。我试图在UnitOfWork的构造函数中显式指定include,但这似乎没有任何区别

编辑:检查EF上以前的版本只是为了确保它与版本无关,没有运气


有什么想法吗?

我发现了上面代码的问题。它位于loadOptions的foreach中

这:

实际上应该是:

set = set.Include(expression);
否则,Include将被忽略,因为它不会被写回要执行的集合

set = set.Include(expression);