我有一个A类,其中包含Bs列表:IList。这与Bs相关联(映射为多对多关系)。 As和Bs之间的关联由包含Bs的外部源确定。请注意,出于效率原因,我在我的数据库中有一份Bs副本。有时我必须运行一个脚本来确定属于特定A的所有B.该脚本返回一些可用于从存储库获取B的密钥。
现在每次运行此更新时,我都会清除B列表并通过我的存储库获取每个B.这是非常低效的。我只是想知道我能做些什么才能让它更快?
我试图在这里使用B的ID列表:
但是由于某些无法解释的原因我不能坚持使用ID,因此我可能不得不再次使用“完全爆炸”的实体列表,这没有问题但是通过存储库一个接一个地获取每个实体的开销。
非常感谢任何反馈。非常感谢。
祝福,
基督教
答案 0 :(得分:1)
对于这种情况,有Session.Load
X.Blas.Add(Session.Load(bid)); // returns a proxy with initialized Id, almost the same as the id
我认为X.Blas.Clear();
会优于X.Blas = new Iesi.Collections.Generic.HashedSet<B>();
编辑:要有效加载多个B,你也可以
var blist = Session.QueryOver<B>()
.Where(b => b.Id.IsIn(IdList))
.List();
进一步保存一些工作
foreach(var bid in idList)
{
var b = Session.Load(bid);
if (!x.SetOfBs.Contains(b))
x.SetOfBs.Add(b);
}