我对虚拟代理还不能完全理解,尽管我已经阅读了大量文章并花费了数小时来寻找好的资料,但我仍然没有找到全面的东西。因此,在这里我会提出一个泛泛的要求,希望能得到更好的信息(可以在此处发布或提供链接)。我也会在下面添加一些详细内容,以更好地解释我想要的东西。
我有几个对象,它们之间有许多引用关系。为了简洁起见,我将使用一个具有基本父子关系的对象(Node)。当我将此对象从数据库中取出时,我想实现延迟加载。根据我所阅读的内容,虚拟代理将通过引用接口(INode)并根据需要获取数据成员来处理所有的延迟加载。【注意:我实际上没有INode类,但是当我在我的数据成员上放置虚拟关键字时,代理似乎确实被使用】
当我在我的类中将数据成员设置为虚拟时,似乎会产生一个代理。这是虚拟代理吗?它们是否实现了延迟加载?
我搜索了有关虚拟关键字的信息,但我找到的唯一文档是要在方法上使用它,这是用于继承,以便派生类可以覆盖函数,这与我想要的东西无关(我认为)。
这是我的当前Node.cs
[DataContract(IsReference=true)]
public partial class Node
{
[DataMember]
public long ID { get; private set; }
[DataMember]
public virtual Node Parent { get; set; }
[DataMember]
public virtual ICollection<Node> Children { get; set; }
}
基本上,我现在非常困惑,只需要一些关于这个主题的指导,甚至是一个在线资源,因为我找到的所有资源都没有什么帮助。
提前感谢。
.Include()
,明确定义要传递给客户端的内容,否则惰性加载+序列化很容易拉取整个数据库。另一种方法是不发送实际的实体,并为传输数据定义特殊的数据传输对象 - 您将需要加载实体并将其转换为数据传输对象。但无论如何,这都回到了最初的开始 - 您知道要传输什么,因此这不是懒加载的场景。 - Ladislav Mrnka