2009-07-31 7 views
3

私はadonet.batch_sizeを10に設定しましたが、オブジェクトグラフに保存するとオブジェクトとすべての子が別のデータベース呼び出しで保存されます。NHibernate adonet.batch_sizeが動作しない

これはNHProfツールを使用して確認できます。

-- statement #1 
INSERT INTO Preferences 
-- statement #2 
INSERT INTO PreferencesToWidgets 
-- statement #3 
INSERT INTO PreferencesToWidgets 
-- statement #4 
INSERT INTO PreferencesToWidgets 
-- statement #5 
INSERT INTO PreferencesToWidgets 
-- statement #6 
INSERT INTO PreferencesToWidgets 
-- statement #7 
INSERT INTO PreferencesToWidgets 
-- statement #8 
INSERT INTO PreferencesToWidgets 
-- statement #9 
INSERT INTO PreferencesToWidgets 
-- statement #10 
INSERT INTO PreferencesToWidgets 
-- statement #11 
INSERT INTO PreferencesToWidgets 
-- statement #12 
INSERT INTO Users 

ユーザー一対多
環境への選好が多対一PreferencesToWidgets基本的に

にあるですが、私は私が好みを追加し、ユーザーを持ち、その好みが束を持っていますそれがウィジェットに追加されました。

私はその後session.SaveOrUpdate(ユーザー)を呼び出して、すべてのオブジェクトは、別のコールに挿入され、バッチサイズが10

に設定されているにもかかわらず、私はFluentNHibernate経由で設定をしています。

 
Fluently.Configure() 
.Database(FluentNHibernate.Cfg.Db.MsSqlConfiguration.MsSql2005.ConnectionString(c => c.FromConnectionStringWithKey(connectionStringKey)) 
.ProxyFactoryFactory("NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu")) 
.Mappings(m => m.FluentMappings.AddFromAssembly(typeof(SessionFactoryFactory).Assembly)) 
.ExposeConfiguration(cfg => cfg.SetProperty("generate_statistics", "true")) 
.ExposeConfiguration(cfg => cfg.SetProperty("adonet.batch_size", "10")) 
.BuildSessionFactory(); 
+1

うーん、私は.ExposeConfigurationのオプションを得ることはありません... – Perhentian

+0

ExposeConfigurationあなたはFluentNHibernateを介して公開されていないものについての生のNHibernateの設定を変更することができます。 –

答えて

9

私は提出した直後に答えを見つけたと思います。それは私のIDを生成するためにSQL Serverを使用しているので、クエリで挿入のIDを選択する必要があるからです。私はNHprofでこれを実際に見ることができますが、それをキャッチしませんでした。

 
INSERT INTO PreferencesToWidgets 
... 
select SCOPE_IDENTITY() 

NHibernate 2.1.0.4000 doesn't seem to like batch insert

+0

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

+1

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

関連する問題