Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在插入行后,使用NHibernate将行插入数据库表,而不调用scope_identity_C#_Nhibernate_Fluent Nhibernate - Fatal编程技术网

C# 在插入行后,使用NHibernate将行插入数据库表,而不调用scope_identity

C# 在插入行后,使用NHibernate将行插入数据库表,而不调用scope_identity,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,我正在尝试使用NHibernate将大量数据插入数据库,但这样做非常缓慢。我已经读过了,建议让NH设置行的标识,这样它就可以批处理,而不需要在插入后调用SCOPE_identity,但是,它是一个带有遗留数据库的棕地应用程序,所以我不能让NHibernate控制行的标识 我有没有办法告诉NH不要选择作用域标识,而直接将行插入数据库?我现在不需要它来知道它们的身份,所以在插入之后,行是否知道它们的身份没有什么区别,但是我猜我不能告诉Nhibernate在这种情况下不要检索身份 如果有任何后果,请使

我正在尝试使用NHibernate将大量数据插入数据库,但这样做非常缓慢。我已经读过了,建议让NH设置行的标识,这样它就可以批处理,而不需要在插入后调用SCOPE_identity,但是,它是一个带有遗留数据库的棕地应用程序,所以我不能让NHibernate控制行的标识

我有没有办法告诉NH不要选择作用域标识,而直接将行插入数据库?我现在不需要它来知道它们的身份,所以在插入之后,行是否知道它们的身份没有什么区别,但是我猜我不能告诉Nhibernate在这种情况下不要检索身份

如果有任何后果,请使用Fluent NH


提前感谢。

NH需要身份来管理缓存中的实体以识别它们。所以我认为没有办法

您的性能问题不一定是由身份引起的。可能是刷新会话的次数太多。尝试关闭自动刷新以验证它,或使用无状态会话


ORM在大规模操作中不是很好。你应该考虑使用更低级的东西(比如SQL)。< /P>这真的是个问题吗?SCOPE_IDENTITY应该是一个会话属性,不需要执行任何数据库操作,如写入数据和更新表索引-它可能需要额外的数据库往返,但仅此而已,与所有其他操作相比,它应该相对便宜。为什么这会显著降低插入速度?@rup是的,这是非常相关的。db生成的密钥阻止nhibernate使用批处理功能。最后,问题不在于范围标识本身,而是在每个单独的插入导致批量插入不可接受之后,需要范围标识slow@Eddy基本上就是这样是的。这是在将NHibernate设置为SQL命令之前最后一次绝望的尝试。@Eddy“db生成的密钥阻止NHibernate使用批处理功能。”但是您可以通过多次插入一次性返回所有ID,不是吗?e、 g.
insert-into-person(name)输出inserted.id值('Alice')、('Bob')、('Charlie')您的目标数据库是什么?您是否使用类似于Repository的工具来管理映射类型的会话和连接?如果mssql和yes:我在我的存储库中添加了一个BulkInsert,它根据映射类型的属性创建一个datatable,在行中复制并使用SqlBulkCopy进行插入。它并不完美,但速度非常快。我正在使用一个无状态会话,它只为这一个查询创建和处理,并尝试将20K+条记录插入数据库。因为标识是由数据库生成的,所以查询上没有批处理,所以我得到了20K+个insert和scope标识语句,这意味着insert非常慢。我知道这违背了NH的所有原则,但由于我不得不尝试使用它,我想知道是否有人知道我可以使用一些巫术。我意识到这是一个漫长的过程。