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

使用实体框架代理对象延迟加载导航属性

洪飞驰
2023-03-14

我定义了两个具有一对多外键关系的类,它们首先由实体框架6.0数据库生成。

public class car
{
    public Nullable<int> label_id { get; set; }
    public virtual label label { get; set; }
}

public class label
{
    public virtual ObservableCollection<car> cars { get; set; }
}

我创建了一个代理对象,并将其添加到DBContext中。

 car c = _context.cars.Create();
_context.cars.Add(c);

然后我设置了一个外键属性并尝试访问相应的导航属性。

c.label_id = 4;
label l = c.label;

设置外键属性标签\u id不会加载导航属性标签。代码中的最后一行返回null

这些类遵循此处列出的创建POCO代理的要求(调试显示已创建代理car对象,因此我相信所有要求都已满足)。

数据库表标签包含主键为4的项。

我不是在这里调用SaveChangesDetectChanges,因为我认为我不需要这样做。

本文档介绍了如何:使用延迟加载加载相关对象,说明“启用延迟加载后,通过导航属性访问相关对象时,将加载相关对象”。

我没有禁用延迟加载,我手头有一个代理对象,但是当我尝试访问它时,导航属性没有加载。

原因可能是什么?

共有1个答案

齐栋
2023-03-14

我不确定您是否可以在不先保存更改的情况下获得对象的延迟加载(从未尝试过或信任过它)。但是,您是否检查了延迟加载选项是否设置为true?我肯定是,但我先问简单的问题。

var lazyLoadingIsTrue = _context.ContextOptions.LazyLoadingEnabled == true;
 类似资料:
  • 问题内容: 因此,我有一个简单的数据库,其中有两个表,首先使用实体​​框架6.02设置了代码。提交表与tbl_lst_Company表具有一对一关系。它们由company和CompanyID字段关联。 这是Fluent映射: 这是我要测试上述实现的单元测试: 我的问题是,运行此测试时,“公司”字段始终为空。如果我从db.Submissions.Include(“ Company”)中的s明确地说,

  • 考虑以下(非常简化的)实体: 在我的映射器中,我可以设置用户罚款,但是一旦执行以下代码(在数据库中保留任何更改之前)

  • 我从这个网站上读到了关于懒惰加载的内容。启用或禁用LazyLoding “如果我们请求已启用LazyLoading的学生列表,数据提供程序将从数据库中获取所有学生,但每个StudentAddress属性在显式访问该属性之前不会加载。” 此语句表示,当我将设置为true时,将不会加载相关数据。然而 如果我设置延迟加载启用=true,上面的代码返回所有特技与他们的老师和地址。我在这里错过了什么?有人能

  • 我正在尝试使用entity framework 4实现自连接,我的用例如下: 如您所见,子类别将通过外键引用父类别。有了这个实现,我可以通过使用外键属性延迟加载ParentCategory。但子集合分类并不是延迟加载。如何强制延迟加载子集合? 编辑 如果我没有过滤结果集,则父集合和子集合的延迟加载将正常工作: Buf如果我过滤结果集,则不会延迟加载子集合

  • 我正在使用启用延迟加载的实体框架5。我有以下代码: 但这有意义吗?我想确保公共属性订阅从不为null。由于虚拟实体框架覆盖了getter和setter以提供延迟加载功能。 我需要这个字段还是我可以只使用一个自动属性,如果没有订阅,我得到一个空列表?

  • 问题内容: 我想限制导航属性返回的模型。例如,我正在使用模型来记录模型的活动。删除模型后,将设置和属性。但是,由于从未真正从数据库中“删除”任何内容,因此这些模型仍将填充在其他模型引用的导航属性中。 AuditInfo类 具有导航属性的类 正在审核的课程 我将如何设置约束,以使BlogPost.Comments中仅未删除的注释(Comment.AuditInfo.Deleted为NULL)? 问题