从数据库中读取对象时,如何加载相关对象
本文关键字:加载 对象 何加载 数据库 读取 取对象 | 更新日期: 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);
}