实体框架6:禁用延迟加载并专门加载包含的表

时间:2018-03-15 06:20:02

标签: entity-framework entity-framework-6 lazy-loading

我们当前的系统默认使用Lazyloading(这是我要禁用的东西,但它现在无法完成)

对于这个基本查询,我想返回两个表,CustomerNote和Note。

这是我的查询

            using (var newContext = new Entities(true))
            {
                newContext.Configuration.LazyLoadingEnabled = false;


                var result = from customerNotes in newContext.CustomerNotes.Include(d=>d.Note)
                             join note in newContext.Notes
                                on customerNotes.NoteId equals note.Id
                             where customerNotes.CustomerId == customerId
                             select customerNotes;

                return result.ToList();
            }

但我的结果只包含CustomerNote表中的数据

链接的实体Customer和Note都是null,我在这里做错了什么?

我使用了以下内容,这比我在别处找到的内容简单得多

            Context.Configuration.LazyLoadingEnabled = false;
            var result = Context.CustomerNotes.Where<CustomerNote>(d => d.CustomerId == customerId)
                .Include(d=>d.Note)
                .Include(d=>d.Note.User);
            return result.ToList();

这将从Notes返回我的CustomerNote表,相关Notes和相关用户。

1 个答案:

答案 0 :(得分:1)

那是你想要实现的叫做渴望加载。

var customerNotes = newContext.CustomerNotes.Include(t=> t.Node).ToList();

这应该有用,我真的不懂关键字语法。 如果上面的代码不起作用,请尝试:

        var customerNotes = newContext.CustomerNotes.Include(t=> t.Node).Select(t=> new {
        Node = t.Node,
        Item = t
    }).ToList();