gpt4 book ai didi

entity-framework - LazyLoadingEnabled 设置在 EF 5 中似乎不起作用

转载 作者:行者123 更新时间:2023-12-04 17:50:58 24 4
gpt4 key购买 nike

我首先将 EF 模型与 POCO 实体和自定义 DbContexts 一起使用。我的问题是设置 LazyLoadingEnabled=false不会影响任何东西,导航属性仍然​​加载。
下面是我简化的示例。

实体程序。一个程序可以是其他程序的一部分:

namespace Domain.Entities
{
using System;
using System.Collections.Generic;

public partial class Program
{
public Program()
{
this.Programs = new HashSet<Program>();
}

public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public System.DateTime StartDate { get; set; }
public System.DateTime EndDate { get; set; }
public Nullable<int> ProgramId { get; set; }

public virtual ICollection<Program> Programs { get; set; }
public virtual Program OwnerProgram { get; set; }
}
}

数据库上下文:
namespace Infrastructure.Model
{
public class ProgramContext : DbContext
{
public ProgramContext()
: base("name=MyContainer")
{
Configuration.LazyLoadingEnabled = false;
}

public DbSet<Program> Programs { get; set; }
}
}

这是我如何使用它:
private ProgramContext _dbContext = new ProgramContext();

// GET api/program
public IEnumerable<Program> GetPrograms()
{
List<Program> list = _dbContext.Programs.ToList();
return list;
}

对于上面的示例,EF 仍然加载 Program 类的 Programs 和 OwnerProgram 属性。我已经尝试删除虚拟关键字,禁用代理创建并验证了 LazyLoadingEnabled=false在模型本身上。

我错过了什么吗?

最佳答案

你看到的效果叫做关系修复 .

实际上导航属性没有显式加载。查询_dbContext.Programs.ToList()只加载整个 Programs数据库中的表。这只是一个简单的 SQL 查询(如 SELECT * FROM ProgramsTable ),没有任何 WHERE条款和没有任何 JOIN到相关行。

当您访问 program.Programs 时,这里也不会发生延迟加载(如果您禁用它,甚至禁用动态代理,它确实不会发生)。和 program.OwnerProgram导航属性。

当您的查询结果具体化时,导航属性会被填充,因为您的查询(加载所有程序)将加载导航属性可以引用的所有程序。 EF 检测到这些相关实体已经在内存中并自动将它们放入导航属性中。

如果您不加载所有程序而仅加载一个程序,您可以验证这一点:

Program program  = _dbContext.Programs.FirstOrDefault();

现在, program.Programsprogram.OwnerProgram将是 null - 除非加载 program是它自己的一部分 program.OwnerProgram收藏还是自己的 OwnerProgram .

关于entity-framework - LazyLoadingEnabled 设置在 EF 5 中似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16357141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com