【问题标题】:Select only parent data and not child data using Entity Framework使用实体框架仅选择父数据而不选择子数据
【发布时间】:2017-02-06 18:58:58
【问题描述】:

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

使用以下查询时:

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

我得到了 State 对象,其中包括一个 City 对象列表。使用上面的查询时会填充此列表。在某些情况下,我只需要州列表而不需要城市。在这些情况下,获取子数据(城市)会显着降低性能。在其他一些情况下,即使性能很慢,我也确实需要所有子数据。

我怎样才能实现以下目标:

  • 在一个函数中获取所有州和城市数据
  • 在另一个函数中只获取州数据而不是城市数据(无子数据)

【问题讨论】:

  • 我建议在模型范围内禁用延迟加载,并在必要时使用急切加载 (Include())。如果需要,您可以在各个上下文实例中启用延迟加载。

标签: entity-framework


【解决方案1】:

State 上的City 属性设为虚拟。

EntityFrameworkTutorial.net:

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

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

【讨论】:

  • 这也是数据库优先方法的正确答案吗?我通常不会更改自动生成的类,因为下次更新模型时它们可能会被覆盖。如果我更改自动生成的 State 类并将 City 属性设为虚拟,那么该更改会在模型更新/刷新后继续存在吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多