无法加载实体框架子实体

时间:2015-06-03 10:52:36

标签: c# entity-framework entity-framework-6

我已经实现了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();
    }
}

我的调用如下:

var entries = _unitOfWork.Query<Entry>(e => e.TableId == tableId,
            e => e.AttributeValues);

即使我已经指定我想加载AttributeValues,每次通过foreach访问一个数据库调用。我试图在UnitOfWork的构造函数中明确指定Includes,但这似乎没有任何区别。

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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

此:

set.Include(expression);

实际应该是:

set = set.Include(expression);

否则简单地忽略Include,因为它没有被写回要执行的集合。