为什么相同的代码行有时容易加载,有时候是Eager Load(.Net C#)?

时间:2016-06-22 13:21:33

标签: c# entity-framework

使用Entity Framework处理WPF应用程序。

我有一个实体MyClass1或多或少地链接到MyClass2:

public class MyClass1
{
...
 List<MyClass2> mc2s {get; set;}
}

我的上下文有每个类的DBSet:

...
public DbSet<MyClass1> C1 { get; set; }
public DbSet<MyClass2> C2 { get; set; }

在我的DBInitialize.Seed()函数中: 在运行此行之后:

 List<MyClass1> list1= new List<MyClass1>(context.C1);

我可以看到所有list1元素的mc2s属性都已正确填充(急切加载)。

然后我必须在程序的不同部分(到ViewModel)中运行完全相同的行:

  List<MyClass1> list1= new List<MyClass1>(context.C1);

在这个安置中,如果轻松加载我的所有列表元素mc2s property = null。

差异来自哪里?

我尝试输入

 context.Configuration.LazyLoadingEnabled = false;

之前,但它没有任何区别。

我认为这是因为Context invect在两次调用中都有所不同?

1 个答案:

答案 0 :(得分:1)

我发现了。 在DBInitialize.Seed()中,上下文已经(完全)加载了MyClass1实例,因此可以使用mc2s属性。

如果在DBInitialize.Seed()中我稍后声明了第二个(新的)上下文,那么它也很容易加载。 现在一切都有道理:))