NHibernate を使用して多数のエンティティを作成し、それらを ISession にアタッチしてから、トランザクションを使用して変更をデータベースにコミットしています。コードサンプルは次のとおりです。
ISession _context = SessionProvider.OpenSession();
//Create new entities
for(int i=0; i<100; i++)
{
MyEntity entity = new MyEntity(i);
//Attach new entity to the context
_context.Save(entity);
}
//Persist all changes to the database
using(var tx = _context.BeginTransaction())
{
//Flush the session
tx.Commit();
}
行 _context.Save() は単に ISession に新しいエンティティを認識させるだけであるという印象を受けましたが、行 tx.Commit() を介してセッションをフラッシュするまで、変更はデータベースに永続化されません。
私が観察したことは、_context.Save() を呼び出すたびに、データベースが新しいエンティティを取得することです。その結果、データベースへの個々の呼び出しが多すぎます。
ISession.Save() が自動的に変更を永続化する理由を知っている人はいますか? NHibernate の動作について何か誤解していませんか? ありがとう。
***編集-明確にするために(2つの提案された回答に照らして)-ここでの私の問題は、_context.Save()を呼び出すとすぐにデータベースが更新されることです。私はこれが起こるとは思わない。tx.Commit() を呼び出すまで、データベースに何も挿入されないことを期待しています。残念ながら、これまでに提案された2つの回答はどちらもこれに役立ちません。
ID ジェネレーターに関するいくつかの優れた情報については、こちらを参照してください。