2010-11-12 64 views
0

我试图找到与NHibernate运行多个(> 1000)插入语句的最有效的方式。我怎样才能一次运行NHibernate的多个插入?

实际的插入语句非常简单,因为它使用来自新创建对象的FK ID和来自子查询的值。下面是我在SQL写:

insert into dbo.NotificationView 
select 
    1 AS IDOfNewItem, 
    U.Id AS UserID, 
    0 AS HasEdited 
from 
    [User] U 
    INNER JOIN UserSite US ON U.Id = US.UserId 
where 
    US.SiteId = 1 

我已经看到,有一个名为参数adonet.batch_sizeNHibernate: insert multiple items at once)可以在“休眠配置” XML文件中设置,但现在看来,这将只是创建与对象相同的语句数insert

有没有办法一次运行插入,而无需遍历每个项目?

如果是这样,这是否会以任何方式对缓存产生负面影响?

回答

1

adonet.batch_size作品,只要:

  • 您使用的是支持的数据库(SQL服务器,而不是有关甲骨文公司的肯定)
  • 您使用的是支持生成器(例如,身份不工作)
  • 你不会对你的实体做任何“奇怪的事情”。

无论如何,它看起来像你试图做一个批量插入,这是完全无关的。

您可以使用HQL中的DML-style operations完成该操作。

+0

adonet.batch_size适用于Oracle。我相信在2.X时间框架中增加了支持。 (我在最后一个项目中使用了它)。警告一句话...... NH 2.X中的Oracle提供程序不会生成正确的更新批量记录消息。如果您查看日志(或正在使用NHProf),看起来批处理不起作用,最后一次更新会执行两次。实际上它正在工作并且日志消息是错误的。这已在NH3中得到修复。 – 2010-11-12 18:17:11

+0

感谢您的回答。 – jose 2010-11-15 14:50:57

相关问题