Nhibernate 恩希伯内特的城堡代理工厂是什么?

Nhibernate 恩希伯内特的城堡代理工厂是什么?,nhibernate,orm,Nhibernate,Orm,恩希伯内特的城堡代理工厂是什么?它的任务是什么?在这种情况下,代理是什么意思?当您从ISession中选择实体时,您得到的不是真实的实体实例,而是代理对象。 此代理对象继承您的实体,并由NHibernate用于跟踪对字段所做的更改。Castle可用于(除其他外,您可以选择,您还可以使用LinFu、Spring.NET等)创建实体的动态代理 默认情况下,NHibernate使用动态代理来表示实体;通过这样做,当您从数据库中检索某个实体时,它能够向您返回一个对象,而无需填充所有属性。通过使用动态代理

恩希伯内特的城堡代理工厂是什么?它的任务是什么?在这种情况下,代理是什么意思?

当您从ISession中选择实体时,您得到的不是真实的实体实例,而是代理对象。 此代理对象继承您的实体,并由NHibernate用于跟踪对字段所做的更改。

Castle可用于(除其他外,您可以选择,您还可以使用LinFu、Spring.NET等)创建实体的动态代理

默认情况下,NHibernate使用动态代理来表示实体;通过这样做,当您从数据库中检索某个实体时,它能够向您返回一个对象,而无需填充所有属性。通过使用动态代理,仅当您真正引用属性时,它才会填充实体。
(因此这是一种延迟加载;但不要与集合/关联的延迟加载混淆)

这种行为就是NHibernate希望您在默认情况下将每个属性创建为虚拟的原因:NHibernate将使用从您的实体继承的Castle(或LinFu…)代理提供程序创建一个新类,它将覆盖所有属性,以便能够“注入”从数据库检索必要数据所需的代码

您可以通过在实体映射中指定“lazy=false”来禁用此行为。(尽管如此,我认为即使您禁用此功能,NHibernate仍将要求您使用其中一个代理工厂)。

请参见: