实体框架核心-延迟加载不起作用

时间:2018-10-07 12:58:56

标签: c# entity-framework-core asp.net-core-2.0

给出以下3个(简化的)类:

  • ClassA {int ID; }
  • ClassB {int ID; }
  • JunctionClass {ClassA classA; ClassB classB; }

当我尝试加载JunctionClass列表时...

var junctionClassList = _appDbContext.JunctionClass
                                     .Include(jc => jc.ClassA)
                                     .Include(jc => jc.ClassB).ToList();

该代码不会加载ClassAClassB对象。

我找到了一个修复程序,但是我不认为我使用EF Core的方式应该使用它:

var classAList = _appDbContext.ClassA.ToList();
var classBList = _appDbContext.ClassB.ToList();

var junctionClassList = _appDbContext.JunctionClass
                                     .Include(jc => jc.ClassA)
                                     .Include(jc => jc.ClassB).ToList();

通过这种方式,junctionClassList对象还将加载classAclassB依赖项。

我的问题是-这是使用懒惰/急切加载的正确方法吗?还是有另一种方法?

2 个答案:

答案 0 :(得分:0)

在这种情况下,您正在使用Include进行Eager加载。 Lazy loading在EF Core 2.1中引入。您需要明确启用它。

答案 1 :(得分:-1)

以下定义适用于Include

    public class JunctionClass
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ClassA ClassA { get; set; }
    public virtual ClassB ClassB { get; set; }

}
public class ClassA
{
    public int Id { get; set; }
    public string Name { get; set; }
}
public class ClassB
{
    public int Id { get; set; }
    public string Name { get; set; }

}

与我们分享您的不同之处。