c# - Entity Framework Core 5 关闭加载NavigationProperties

标签 c# .net entity-framework-core lazy-loading

当我从 DBContext 获取数据时,如何在 EF Core 5 中关闭加载导航属性?

我尝试添加:

public DataContext(DbContextOptions<DataContext> options)
        : base(options)
{
   this.ChangeTracker.LazyLoadingEnabled = false;
}

但导航属性仍会加载。

Loaded NavProp

编辑:我添加到 AddDBContext选项

UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);

看起来这可行。

希望它不会破坏其他任何东西?

编辑2 UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking); - 好吧,这不是我需要的......

我得到的数据如下:

List<Data> dataList = await _dataContext.Data.Where(w => idMeters.Contains(w.IdMeter.Value)).ToListAsync();

结果我有带有 IdMeterNavigation 的 Data 对象,并且 IdMeterNavigation 有另一个 NavigationProperties... 我不想加载任何 NavigationProperties 我该如何做到这一点?

我什至删除了virtual来自类字段,并且它们仍然被加载。

最佳答案

EF 的默认行为是不加载相关实体。 为了加载相关实体,您可以使用:

  • 急切加载
  • 显式加载
  • 选择加载
  • 延迟加载

所以,对我来说,您似乎启用延迟加载,或者您实际上使用“选择”LINQ扩展或某种自动映射器软件进行SELECT加载。

检查您是否确实没有启用延迟加载... https://learn.microsoft.com/en-us/ef/core/querying/related-data/lazy

关于c# - Entity Framework Core 5 关闭加载NavigationProperties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68111640/

相关文章:

C# 调用返回具有固定大小 char 数组的结构的 C 函数

c# - 我应该如何为变量添加相同的名称前缀?

c# - 为什么我在这里收到 "' System.Windows.Forms.Control' 不包含 'Checked' ...”的定义?

.net - 如何规范化字符串?

c# - 类似于 IList.IndexOf() 但在 IEnumerable<T> 上的东西?

c# - ASP.NET MVC - 无法在对象中插入重复的键行

entity-framework - 没有 DbSet 的 Entity Framework 核心存储过程

c# - Facebook Webhook签名计算(C#)

c# - AutoMapper:一对多 -> 多对多

.net - Dragablz 组件并使用不同的窗口作为宿主