【问题标题】:EF core 5 how to populate navigation property without INCLUDEEF core 5 如何在不包含 INCLUDE 的情况下填充导航属性
【发布时间】:2023-03-12 01:35:01
【问题描述】:

除非我使用Include(),否则我无法自动填充导航属性。如何在没有Include() 的情况下自动填充导航属性?

我使用的是 EF 核心 5.0

Class customer
{
    [key]
    public int MappingID { get; set; } 
    public string MappingName {get;set;}
}

Class Order
{
    [key]
    public int orderID {get;set;}
    public string name {get;set;}
    public int MappingID { get; set; } 
    [ForeignKey(nameof(MappingID))]
    public virtual customer customerMapping { get; set; }
}

这不起作用。 customerMappingnull 的身份返回 -

_context.Order.FirstOrDefault(x => x.orderID == 1);

这行得通。 customerMapping 被填充 -

_context.Order.Include(y => y.customerMapping).FirstOrDefault(x => x.orderID == 1);

【问题讨论】:

标签: c# .net asp.net-core entity-framework-core


【解决方案1】:

加载父对象时,将始终包含拥有的类型。此功能是通过在模型中设置属性来实现的,您可以手动设置该属性以进行任何导航。

modelBuilder.Entity<Order>()
    .Navigation(d => d.customerMapping)
    .AutoInclude(true);

【讨论】:

  • OP 没有提到任何关于自有类型的内容。
  • 不,但这与我发现该功能的方式有关,我认为它可能会帮助其他人找到答案。
  • 这很好,但是如果订单和客户是一对多的呢?我知道这不太可能,但我真的不知道。
  • 问题是关于加载没有包含的导航属性。这是可能的,即使是 1-many。但如果您并不总是需要这些数据,显然会对性能产生影响。
  • @atiyar 我必须同意杰里米的观点。 AutoInclude 功能自 EFC 5.0 起正式存在(甚至在 5.0 之前通过 SetIsEagerLoaded - 注意,public 元数据 API)。但是由于某些未知的原因,除了 API 本身之外,文档中的任何地方都没有提到它。这就是为什么没有多少人知道的原因,并且在某些情况下它很有用(并且已经在他们的 GitHub 中被要求)。并且可以按查询关闭,类似于全局过滤器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-25
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
相关资源
最近更新 更多