2009-07-20 10 views
4

プロジェクトの1つでNHibernate 2.1.0.4000を使用しています。私はadonet.batch_size〜をcfgファイルに設定していますが、insert文は単一の文として扱われます。更新は正常に動作するようです。どうしたの?NHibernate 2.1.0.4000はバッチインサートが好きではないと思われます

更新日: プライマリキージェネレータとしてIDを選択したためですか?

<id name="Id" column="Id" unsaved-value="0" type="Int32"> 
    <generator class ="identity"></generator> 
</id> 
+0

これは(http://groups.google.com/group/nhusers/browse_thread/thread/d4c8fd9625ef5f32/55c7a8db66f62a39?hl=en&lnk=gst&q=batch_size&pli=1)見つかりましたが、その意味がわかりません。 – Jeff

+0

http://nhibernate.info/doc/nhibernate-reference/batch.html:*第13章バッチ処理*: "ID識別子ジェネレータを使用する場合、NHibernateはADOレベルでのバッチ処理を透過的に無効にします。 – ngm

答えて

11

NHibernateの特定のバージョンに関する問題はわかりません。

あなたのエンティティのIDジェネレータとして使用しているのはnativeですか?これにより、挿入されたすべての挿入が強制的に実行され、生成されたIDが選択されます。これは、データベースがすべてのIDを生成する必要があるためです。これは、バッチ処理がアップデートで機能するように見える理由も説明します。

可能であれば、たとえばに切り替えてください。 hilo戦略、または(簡単に)読み取り可能なIDを気にしない場合はさらに​​となります。

Fabioには、このトピックに関する面白い投稿hereがあります。

+0

はいSQL Server 2005 ID(generated int)を主キーとして使用しています。これが理由を説明します。ありがとうございました。 – Jeff

+0

私は既存のデータベースを使っているので、idを変更することはできません。 – Jeff

+1

アイデンティティジェネレータの説明 http://fabiomaulo.blogspot.com/2009/02/nh210-generators-behavior-explained.html –

関連する問題