是否可以与Nhibernate一起批处理不同的插入/ ID命令?

时间:2011-12-10 03:47:39

标签: c# nhibernate nhibernate-mapping

示例1,无论您的配置如何,以下插入都会产生两批:

INSERT INTO <b>entitytable1</b> (someInt) VALUES (1)
INSERT INTO <b>entitytable2</b> (someInt) VALUES (3)
-- Notice tables are <b>different</b>
-- Results in <b>2</b> round trips to the db
-- C# code that can generate such statements:
   session.Save(typeof(entitytable<b>1</b>), new entitytable<b>1</b>{someInt = 1})
   session.Save(typeof(entitytable<b>2</b>), new entitytable<b>2</b>{someInt = 3})
   transction.Commit();

但是,在下面的示例2中,插入会导致1批:

INSERT INTO <b>entitytable1</b> (someInt) VALUES (1)
INSERT INTO <b>entitytable1</b> (someInt) VALUES (3)
-- Notice tables are the <b>same</b>
-- Results in <b>1</b> round trip to the db
-- C# code that can generate such statements:
   session.Save(typeof(entitytable<b>1</b>), new entitytable<b>1</b>{someInt = 1})
   session.Save(typeof(entitytable<b>1</b>), new entitytable<b>1</b>{someInt = 3})
   transction.Commit();

是否可以将示例1作为2工作,即将不同的插入一起发送到数据库(例如1次往返)?

批量定义,仅限少数:在一次往返中将多个语句/插入组合在一起,最多为Ado_Batch_size,发送到数据库。

上面显示的sql当然是由Nhibernate生成的!这是你在NHProfiler上看到的。

版本:Nhibernate 3.2

1 个答案:

答案 0 :(得分:1)

根据nHibernate batch insert doesn't work with associations(原始海报已经找到),似乎当前版本的NHibernate不支持此功能。

文章Profiling NHibernate Batching似乎证实了这一点,并建议使用stateless sessions(遗憾的是忽略了关联)。

或者,this answer建议使用HQL。

警告:我不是NHibernate用户。务必使用NHProfiler检查实际行为。