当前位置: 首页 > 知识库问答 >
问题:

如何防止实体框架加载所有子对象

曾成天
2023-03-14

我目前正在使用实体框架来建立一个论坛使用ASP。NET MVC I有3个主要模型[类别]1--*[论坛]1--*[帖子]

如果我有5个类别,每个类别有4个论坛,每个论坛有1000个帖子,我只想显示类别,当我这样做的时候,这意味着我也选择了20000个帖子??

因为每个类别对象都有一个列表

共有3个答案

姚骁
2023-03-14

使用存储SQL过程仅显示有问题的类别。我假设此功能会经常使用,因此会影响性能。SP是预编译的,执行计划是已知的,此外,您可以从aFewTablesnJoins中添加一个选择不同的分类字段,其中在您的类别查询中添加一些Id=@参数-少IO,管理员对性能更满意。当然,如上所述,延迟实例化始终是一种选择。

罗鸿福
2023-03-14

在dbcontext文件中设置lazyloading=false。

袁奇逸
2023-03-14

您可以使用延迟加载来防止检索子对象。请参阅此处。默认情况下应启用延迟加载。

延迟加载是在第一次访问引用实体/实体的属性时自动从数据库加载实体或实体集合的过程

使用POCO实体类型时,通过创建派生代理类型的实例,然后覆盖虚拟属性以添加加载挂钩来实现延迟加载。例如,使用下面定义的Blog实体类时,将在第一次访问Posts导航属性时加载相关Posts:

public virtual ICollection<Post> Posts { get; set; } 

您可以使用实现特定的即时加载。Include()。例如:

db.Forums.Include(i => i.Posts)
 类似资料:
  • 实体框架5.0首先使用现有数据库编写代码。使用电动工具对类进行逆向工程。一切都很好。数据库有两个表。一个父母和一个孩子的外键返回到父母ID。ID都是带有自动增量的int。我添加了许多父母记录,现在想将孩子记录添加到特定的父母。我能看到的唯一方法是通过在父母表中搜索名称或其他属性并返回ID来找到适当的父母ID。然后在添加孩子时在外键属性中使用该ID。我不想设置新父母,所以这是将孩子添加到现有父母的唯

  • 当我使用实体框架保存实体时,我自然假设它只会尝试保存指定的实体。但是,它也在尝试保存该实体的子实体。这会导致各种完整性问题。如何强制EF只保存我要保存的实体并因此忽略所有子对象? 如果我手动将属性设置为null,我会收到一个错误“操作失败:无法更改关系,因为一个或多个外键属性不可为空。”这是非常适得其反的,因为我专门将子对象设置为null,因此EF不会管它。 为什么我不想保存/插入子对象? 由于这

  • 问题内容: 我们有一个类似于以下内容的查询: 问题在于,在添加时,实体框架添加到生成的SQL的语句会使查询花费很长时间才能执行- 类似于以下内容: 向linq查询中添加orderby也无济于事,除了添加其他列作为排序依据之外,它不会影响上面的语句。 问题答案: 显然,这是EF在内部做的事情,以简化事后创建对象的过程。您无法删除说明。

  • 我正在尝试编写一个Updatestatus方法,该方法仅在我保存对数据库的更改时更新实体的状态字段。如果实体中的任何其他字段发生了变化,我不想将这些更改保存到数据库中。对于实体自己的字段来说,这很简单,使用: 但是,我发现,如果相关实体没有键值集,则将插入通过我设置状态的实体的导航属性可访问的任何相关实体。因此,如果将新的子实体添加到实体中。子项,并且子实体ChildId属性为0,则该子项将插入到

  • 问题内容: 基本上我想 从主应用程序上的按钮进行调用。我用这个 当 我出现并关闭它时,/ 也关闭。我尝试添加,但也无法正常工作。如何获得? 任何帮助,将不胜感激。 问题答案: 改变如下。 如果添加false,则close属性的默认出口变为false。

  • 我有一个简单的问题,但似乎找不到解决的办法。我使用的是EntityFramework核心版本2.0.1,希望在默认情况下加载所有实体。 示例: 但当我加载订单实体时,相关实体Customer及其内部地址为null 我所尝试的: 尝试升级到版本2.1并使用LazyLoadingProxies设置为false 这只是一个例子,我有多个嵌套级别的实体,我想在通用存储库中加载嵌套的相关数据,因此不能使用I