流畅的NHibernate LazyLoad问题

Dot*_*net 6 nhibernate lazy-loading

我找不到这个问题的答案,所以我认为这是我做错了.

我有一个PersistenceModel设置,我设置了一个约定如下: -

persistenceModel.Conventions.Add(DefaultLazy.Always());
Run Code Online (Sandbox Code Playgroud)

但是,对于我的某个实体中的一个HasManyToMany关系,我希望按照以下方式进行急切加载: -

HasManyToMany(x => x.Affiliates).Not.LazyLoad();
Run Code Online (Sandbox Code Playgroud)

直观地说,我期望进行急切加载,因为我重写了我已指定为约定的延迟加载默认值,但它仍然是延迟加载.如果我将DefaultLazy约定设置为never,然后在单个关系上设置LazyLoad,则它也不起作用.

有任何想法吗?

Jam*_*acs 9

当您设置Not.LazyLoad()时,您告诉NHibernate在父加载时加载Affiliates.NHibernate将通过在Affliates多对多表上执行另一个选择来执行此操作,无论您是否访问Affiliates集合.NHibernate正在使用另一个选择,因为这是默认的提取模式.您也希望在查询或映射中覆盖提取模式.要在映射中执行此操作,请添加以下内容:

HasManyToMany(x => x.Affiliates)
    .Not.LazyLoad()
    .Fetch.Join();
Run Code Online (Sandbox Code Playgroud)

如果你希望NHibernate持久保存添加到集合中的新Affiliaites并删除孤立的那些,你可能还想包含一个".Cascade.AllDeleteOrphan()".如果不这样做,则必须显式调用session.Save(newAffiliate).否则,当您的Affiliates集合包含新的关联企业时,您将收到TransientObjectException.