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,则它也不起作用.
有任何想法吗?
当您设置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.
| 归档时间: |
|
| 查看次数: |
6986 次 |
| 最近记录: |