0
私はFluent NHibernateを使用していて、多くの更新をしようとしています。まず、次のようなコードがあります:Load for GetのようなQueryOverの方法はありますか?
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();
}
しかし、問題は、すべての更新アイテムを更新する前に読み込む必要があるという点です。したがって、データベースは2回クエリされました。 SQLでは、1つのクエリで行うことができ、NHibernateの1つのクエリでこれを行う方法がいくつか存在すると思います。そして、実際にdbから項目をロードせず、代りにプロキシでしか動作せず、更新/削除を行うときにのみデータベースにヒットするLoadメソッドのdocが見つかりました。
存在しますか?NHibernateでは、アイテム自体はロードせず、ロードのようなプロキシをロードするいくつかのメソッドがありますか?
申し訳ありませんが、NHはこの種のセットベースの操作には間違ったツールです。これを行う最も効率的な方法は、HQLまたは生のSQLを使用することです。それを言って、あなたは「ステートレスセッション」の使用を調査しましたか?それは効果的な妥協であるかもしれません。 –
このコードを書く会社では、テキスト形式のクエリは使用しません。この場合のパフォーマンスは、SQLやHQLの書き込みにはあまり悪くありません。 IStatelessSessionは、ISessionインタフェースと似ていますので、それを助けません。 – Daniil
@DavidOsborneとにかくお返事ありがとうございます。 – Daniil