速度相关的问题 - (F)NHibernate

时间:2011-08-19 08:37:01

标签: hibernate nhibernate fluent-nhibernate

我有一个A类,其中包含Bs列表:IList。这与Bs相关联(映射为多对多关系)。 As和Bs之间的关联由包含Bs的外部源确定。请注意,出于效率原因,我在我的数据库中有一份Bs副本。有时我必须运行一个脚本来确定属于特定A的所有B.该脚本返回一些可用于从存储库获取B的密钥。

现在每次运行此更新时,我都会清除B列表并通过我的存储库获取每个B.这是非常低效的。我只是想知道我能做些什么才能让它更快?

我试图在这里使用B的ID列表:

Fluent Nhibernate problem

但是由于某些无法解释的原因我不能坚持使用ID,因此我可能不得不再次使用“完全爆炸”的实体列表,这没有问题但是通过存储库一个接一个地获取每个实体的开销。

非常感谢任何反馈。非常感谢。

祝福,

基督教

1 个答案:

答案 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);
}