2016-09-28 68 views
0

我为数据库优先的实体框架模型启用了延迟加载。在这个例子中,我将使用表State和City,其中City表是State表的子表(通过外键连接)。使用实体框架仅选择父数据而不选择子数据

当使用下面的查询:

from State in DBEntity.State 
where State.StateId == 1 
select State 

我得到的国家目标,其中包括城市对象的名单。使用上面的查询时,此列表将被填充。在某些情况下,我只需要国家名单,不要城市。在这些情况下,获取儿童数据(城市)会显着降低性能。在其他一些情况下,即使表现较慢,我确实需要所有儿童数据。

如何能够做到以下几点:

  • 获得所有国家和城市的数据在一个功能
  • 在另一个函数得到的只是国家的数据,而不是城市数据(无子数据)
+0

我建议禁用整个模型的惰性加载,并在必要时使用加载('Include()')。如果需要,您可以在各个上下文实例中启用延迟加载。 –

回答

1

使State上的City属性为虚拟。

EntityFrameworkTutorial.net

导航属性应定义为公共,虚拟。如果该属性未被定义为虚拟,则上下文不会执行延迟加载。

此,如果您使用的include()语句或尝试下载您State后访问它们只会加载City对象的列表。

+0

这是数据库优先方法的正确答案吗?我通常不会更改自动生成的类,因为下次更新模型时可能会覆盖它们。如果我更改自动生成的State类并使City属性为虚拟,那么这种更改是否会在模型更新/刷新后继续存在? –