【发布时间】:2011-06-29 05:43:42
【问题描述】:
我相当肯定这是一个延迟加载问题,但是在阅读了延迟加载之后,我仍然没有接近解决方案。我试过打开和关闭延迟加载,但没有成功。当我从数据库中提取一个节点时,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; }
}
【问题讨论】:
-
这看起来不像是延迟加载问题,您的 Children 集合未标记为虚拟,因此应该已通过节点实现 - 您确定 DB 中有相关的子注释吗?
-
是的。如果我加载所有节点(即 var nodes = context.Nodes.ToList()),那么所有关系都存在。如果我加载一个节点(即 var node = context.Nodes.Find(1)),那么所有的关系都是空的。当我将它们标记为虚拟时,它实际上在加载一个节点时工作,但同样,我遇到了序列化问题。我想我可以尝试解决这些问题,但我宁愿有一个解决方案。
标签: c# entity-framework lazy-loading