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的一些方法,加载不是项目本身,但代理像加载?
对不起,但NH对于这种基于集合的操作来说确实是错误的工具。执行此操作的最有效方法是使用HQL或原始SQL。说这个,你有没有研究过使用'无状态会话'?这可能是一个有效的妥协。 –
在我编写此代码的公司中,我们不使用文本形式的查询。在这种情况下性能没有那么糟糕的写入SQL或HQL。 IStatelessSession与ISession接口类似,所以对此没有帮助。 – Daniil
@DavidOsborne无论如何感谢您的回答。 – Daniil