gpt4 book ai didi

NHibernate:深度访谈虚拟和延迟加载

转载 作者:行者123 更新时间:2023-12-02 12:39:03 24 4
gpt4 key购买 nike

我认为在采访中问这个问题有点荒谬。但如果面试官问...需要回答。

深入解释:

  1. 为什么属性和方法必须是虚拟的
  2. 延迟加载的工作原理

问候,

最佳答案

您必须查看 NHibernate 源代码以获取更多详细信息,但我的理解如下:延迟加载是通过用运行时生成的代理替换类来实现的。 Proxy 是从类继承的,因此它可以“拦截”方法调用并延迟加载实际数据。仅当方法和属性是虚拟的时,此拦截才有效,因为客户端代码通过对类的引用来调用它们。客户端代码可能不知道它 really使用代理(从类派生)。实际的延迟加载逻辑要复杂得多,但这大致是发生的事情:

public class Customer {
public virtual String Name {
get { return _name; }
}
}

// code like this gets generated at runtime:
public class CustomerProxy7461293476123947123 : Customer {

private Customer _target;

public override String Name {
get {
if(_target == null){
_target = LoadFromDatabase();
}
return _target.Name;
}
}
}

这样,只有当客户端实际调用“Name”时才会加载数据:

Customer customer = Session.Load<Customer>(1);  // <-- proxy is returned
// or
Customer customer = salesman.FavoriteCustomer; // <-- proxy is returned

...

String name = customer.Name; // <-- proxy's Name will be called, loading data

类似的机制也用于集合,只不过集合不需要在运行时生成。 NHibernate 有内置的持久集合,可以延迟加载项目。

关于NHibernate:深度访谈虚拟和延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7299630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com