【问题标题】:Can you explain what does NHibernate 'proxy' basically mean?你能解释一下 NHibernate 'proxy' 的基本含义吗?
【发布时间】:2011-06-23 08:19:03
【问题描述】:

请给 NHibernate 'proxy' 一个简单的定义。

例如,这是来自 Manning Nhibernate in Action 的引文:

'对于一个或 关联,可以懒取 仅当关联的类映射 启用代理。'

【问题讨论】:

    标签: .net nhibernate proxy


    【解决方案1】:

    这意味着它将创建一个继承原始实体的类,并覆盖表示关联类的实际属性。

    这样,它可以实现从数据库中获取数据以实现惰性的逻辑,而不是始终让数据可用。

    不过,对于集合,这是在 ISet 和 IList 等的 NHibernate 版本中实现的。这仅在多对一或一对一关系中相关。

    例子:

    public class YourEntity {
        public virtual OtherEntity Entity { get; set; }
    }
    
    public class DynamicProxyEntity : YourEntity {
        private OtherEntity entity;
    
        public override OtherEntity Entity {
            get { return entity = LoadFromDb(); }
            set { this.entity = value; }
        }
    }
    

    这是一个非常简单的版本,希望它能让您深入了解它的工作原理。这当然会给您的应用程序带来问题,因为您不会有实际实体类型的实例,而是派生的实例。如果您使用属性等装饰了类,则可能无法识别这些类(取决于您的代码)。此外,如果您不小心,类型检查等可能会中断。

    【讨论】:

    【解决方案2】:

    当你有一个惰性关联时,NHibernate 需要知道代码何时请求指向关联的属性,以便访问数据库并获取正确的实体。这是通过“代理”您的类来完成的,这意味着从您的类派生并覆盖获取和设置的属性。这就是实体类需要具有公共属性virtual 的原因,因此它们可以在生成的派生(代理)类中重载。代理由配置中指定的代理工厂自动创建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 2011-08-31
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多