我一直在玩几种方法来批量插入10,000个对象的列表到我的数据库中。
这些对象没有任何关系,只存储POCO数据。
我已经开始使用StatelessSession,正如许多文章所建议的那样,我注意到了明显的改进。
有一件事仍然存在 - 在每次插入后,NHibernate执行SELECT语句以获取刚刚插入的对象的ID。有没有办法推迟到我要实际查询对象时?如果NHibernate只是插入行而不用担心ID,那么这似乎是一个巨大的性能优势。
这可能吗?
答案 0 :(得分:2)
不可能,有时值得考虑适合这项工作的工具。如果您的表上有一个标识列,则NHibernate ALWAYS
会跟随一个带有插入的select,即使BULK
插入也是如此。另一件需要考虑的事情是,您的一级缓存将变得非常大(除非您使用无状态会话),这可能会导致其他复杂情况。
我理解你的观点想要使用NHibernate的优点,但有时我们无法避免使用其他工具......
如果我需要将10K插入内容发送到我的数据库中,我将使用SQlBulkCopy
类并完全绕过NHibernate。
SQLBulkCopy可让您有效地批量加载SQL Server表 来自其他来源的数据。
请参阅here for more信息
答案 1 :(得分:0)