2009-07-31 60 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 2009-10-20 12:09:14

+0

ExposeConfiguration允許您更改原始NHibernate的配置對於任何不通過FluentNHibernate暴露。 – 2009-10-21 13:31:08

回答

9

我想我在提交後立即找到答案。這是因爲我正在使用SQL Server爲我生成ID,所以查詢需要選擇插入的ID。我可以在NHProf中看到這一點,但沒有抓住它。

 
INSERT INTO PreferencesToWidgets 
... 
select SCOPE_IDENTITY() 

NHibernate 2.1.0.4000 doesn't seem to like batch insert