fos*_*ndy 23
我怀疑另一种思考方式就是这样.
class Foo
{
public virtual Bar SingleBar { get; set; }
public virtual ICollection<Bar> MultiBar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
(你不能将lazy ="proxy"设置为集合,也不能将lazy ="true"设置为单个引用.要么会导致NH抛出XmlSchemaException,这对初学者来说有点神秘.)
在操作上,它们执行相同的抽象操作:当且仅当访问属性时,NHibernate才会访问数据库并填充属性.
然而,由于获取对象所需的实现有一些细微差别(在单一情况下,引用的id(Bar)是用父实体(Foo)加载的.在集合的情况下,id是未知的并且必须在另一张表中找到)
Fre*_*els 19
lazy ="proxy"意味着NHibernate将懒惰地初始化你的类的实例; 当NHibernate从数据库中检索您的类的实例时,它将 - 在这种情况下 - 不返回您的类的"真实"实例,但它宁愿为您提供代理.也就是说,它将返回另一个类型的对象,更具体地说,是一个作为类的子类的对象(由NHibernate通过IL生成生成).
您将获得的对象是代理,而唯一的填充属性是Id属性.只要在实例上调用另一个属性,NHibernate就会初始化代理,并从数据库中检索所有其他属性/集合(延迟加载的属性除外).
Lazy ="true"用于另一个级别.而在类级别使用lazy ="proxy",而在集合级别使用lazy ="true".这意味着该集合应该是延迟加载的.
该文件引用说,代理属性的值是:
lazy="proxy|no-proxy|false"
Run Code Online (Sandbox Code Playgroud)
lazy(可选 - 默认为代理):默认情况下,单点关联被代理.
lazy ="no-proxy"指定在首次访问实例变量时应该懒惰地获取属性(需要构建时字节码检测).
lazy ="false"指定始终紧急提取关联.
| 归档时间: |
|
| 查看次数: |
38382 次 |
| 最近记录: |