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

时间:2011-06-15 15:52:37

标签: c# entity-framework lazy-loading

我很确定这是一个延迟加载问题,但在阅读了延迟加载后,我仍然没有接近解决方案。我试过打开和关闭延迟加载没有成功。当我从数据库中提取节点时,父节点和子节点为空,即使数据库中存在此类对象。

我还添加了'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; }

}

2 个答案:

答案 0 :(得分:2)

请参阅Loading Related Objects

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

答案 1 :(得分:0)

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

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