从数据库中读取对象时,如何加载相关对象

本文关键字:加载 对象 何加载 数据库 读取 取对象 | 更新日期: 2023-09-27 17:59:17

我很确定这是一个延迟加载问题,但在阅读了关于延迟加载的文章后,我仍然离解决方案不远。我试过打开和关闭懒惰加载,但都没有成功。当我从数据库中提取节点时,Parent和Children为null,即使数据库中存在这样的对象。

我还添加了"IsReference=true"作为解决此问题的尝试。

我曾一度使作为对象引用的数据成员成为虚拟的,但代理存在序列化问题。

DatabaseContext.cs

public class DatabaseContext : DbContext
{
  public DatabaseContext() : base("DatabaseName")
  {
    Configuration.LazyLoadingEnabled = false;
  }
  public DbSet<Node> Nodes { get; set; }
}

Node.cs

[DataContract(IsReference = true)]
public partial class Node
{
  [DataMember]
  public long ID { get; private set; }
  [DataMember]
  public Node Parent { get; set; }
  [DataMember]
  public ICollection<Node> Children { get; set; }
}

从数据库中读取对象时,如何加载相关对象

请参阅加载相关对象

最简单的方法是在查询中使用.Include("Parent").Include("Children")

我最终将我想要的includes作为参数(您可以使用实际类型或字符串)传递给该方法,然后我循环includes,因为它们返回DbQuery对象,而实际上并不查询数据库。感谢您输入@moi_meme(+1)。

foreach (var include in includes)
{
  query = query.Include(include);
}