我试图在数据库中插入大量的NHibernate数据,并且这样做非常缓慢。我已经仔细阅读过,并且无处不在的建议是让NH设置该行的标识,以便它可以批量处理,而不需要在插入后调用SCOPE_IDENTITY,但是,它是一个带遗留数据库的brownfield应用程序,让NHibernate控制行的标识。使用NHibernate在数据库表中插入行,而不会在插入行后调用scope_identity
有什么办法可以告诉NH只是不选择范围标识,只是将行插入到数据库中?我不需要它知道他们的身份,所以插入后这些行是否知道他们的身份没有什么区别,但我猜我不能告诉Nhibernate不要检索身份这个案例?
使用Fluent NH如果这是任何后果。
在此先感谢。
这真的是个问题吗? SCOPE_IDENTITY应该是一个会话属性,不需要执行任何数据库操作,例如写入数据和更新表索引 - 它可能需要额外往返数据库,但这就是它,与其他所有操作相比,它应该相对便宜。为什么这会显着减少插入速度? – Rup 2012-07-06 11:38:00
@rup是的,它非常相关。 db生成的密钥会阻止nhibernate使用批处理功能。最后,这不是scope_identity这样的问题,但scope_identity是每个插入后,使批量插入不可接受的缓慢 – Eddy 2012-07-06 11:49:08
@Eddy基本上是耶。这是在将NHibernate设置为SQL命令之前屈服于NHibernate的绝望尝试。 – 2012-07-06 11:52:12