2017-08-07 91 views
0

我使用流利的NHibernate并尝试做很多更新。首先想到的是这样的代码:是否存在QueryOver的任何方法,如Load for Get?

using (ISession s = OpenSession()) 
    using (s.BeginTransaction()) 
    { 
     IList<SomeType> items s.QueryOver<SomeType>() 
      .Where(someCondition) 
      .List(); 
     items.ForEach(i => { 
      i.Foo = "bar"; 
      s.Update(i); 
     }); 
     s.Transaction.Commit(); 
    } 

但问题在于,每次更新项目必须在更新之前加载。所以数据库查询了两次。在SQL中,它可以用一个查询完成,我相信存在一些方法可以在NHibernate中使用一个查询来完成此操作。并找到Load方法的文档,实际上并没有从数据库中加载项目,只能使用一些代理,而只有在更新/删除时才打到数据库。

存在NHibernate的一些方法,加载不是项目本身,但代理像加载?

+0

对不起,但NH对于这种基于集合的操作来说确实是错误的工具。执行此操作的最有效方法是使用HQL或原始SQL。说这个,你有没有研究过使用'无状态会话'?这可能是一个有效的妥协。 –

+0

在我编写此代码的公司中,我们不使用文本形式的查询。在这种情况下性能没有那么糟糕的写入SQL或HQL。 IStatelessSession与ISession接口类似,所以对此没有帮助。 – Daniil

+0

@DavidOsborne无论如何感谢您的回答。 – Daniil

回答

0

对于现在更新大数据的最佳方式是使用HQL或原始SQL如何提及@DavidOsborne。

我不幸找不到任何其他懒惰方式的工作方式。

相关问题