当我尝试将新实体添加到 db 时,Datacontext 抛出“当前 datacontext 实例未启用对象跟踪”异常,如下所示。
db.Posts.InsertOnSubmit(new entity);
启用跟踪更改对我来说不是一个解决方案,因为当我有很多插入操作时它太慢了。
在这种情况下有什么解决方案?
当我尝试将新实体添加到 db 时,Datacontext 抛出“当前 datacontext 实例未启用对象跟踪”异常,如下所示。
db.Posts.InsertOnSubmit(new entity);
启用跟踪更改对我来说不是一个解决方案,因为当我有很多插入操作时它太慢了。
在这种情况下有什么解决方案?
你不能一边吃蛋糕一边吃。
根据您的数据库结构,您可以考虑使用两个数据上下文。一个启用了更改跟踪,一个禁用了。
但是,每条记录仍然有一个插入语句。这就是 linq-2-sql 的运作方式,在 l-2-s 中没有解决方案。您必须查看SqlBulkCopy
类以进行批量插入。
通常启用和禁用对象跟踪只是连接或忽略更改跟踪事件处理程序。如果您尝试插入如此多的项目以致在尝试连接这些事件时变得太慢,那么您将遇到更大的问题。
请记住,LINQ to SQL 将为您添加的每条记录发出单独的数据库请求。这里的网络瓶颈肯定比仅仅连接更改跟踪事件是一个更大的问题。LINQ to SQl 不是批量插入的最佳选择。考虑对这种操作使用 SSIS/批量复制。