NHibernate adonet.batch_size不起作用

时间:2009-07-31 19:41:53

标签: nhibernate

我将adonet.batch_size设置为10,但是当我在对象图上执行保存时,它会将对象及其所有子项保存在单独的数据库调用中。

我可以使用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(user),并且所有对象都插入到单独的调用中,即使批量大小设置为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 个答案:

答案 0 :(得分:9)

我想我在提交后就找到了答案。这是因为我正在使用SQL Server为我生成id,因此查询需要选择返回插入的id。我实际上可以在NHProf中看到这一点,但没有抓住它。

INSERT INTO PreferencesToWidgets
...
select SCOPE_IDENTITY()

NHibernate 2.1.0.4000 doesn't seem to like batch insert