你能解释一下NHibernate'代理'的含义是什么意思吗?

时间:2011-06-23 08:19:04

标签: .net nhibernate proxy

请你给出NHibernate'代理'的简单定义。

作为一个例子,这是Manning Nhibernate in Action书中的引文:

  

'对于或   关联,懒惰提取是可能的   只有关联的类映射   启用代理。'

2 个答案:

答案 0 :(得分:2)

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

通过这种方式,它可以实现从DB获取数据以实现懒惰的逻辑,而不是始终拥有该数据。

对于集合,虽然这是在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; }
    }
}

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

答案 1 :(得分:2)

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