1

当我尝试将新实体添加到 db 时,Datacontext 抛出“当前 datacontext 实例未启用对象跟踪”异常,如下所示。

db.Posts.InsertOnSubmit(new entity);

启用跟踪更改对我来说不是一个解决方案,因为当我有很多插入操作时它太慢了。

在这种情况下有什么解决方案?

4

2 回答 2

1

你不能一边吃蛋糕一边吃。

根据您的数据库结构,您可以考虑使用两个数据上下文。一个启用了更改跟踪,一个禁用了。

但是,每条记录仍然有一个插入语句。这就是 linq-2-sql 的运作方式,在 l-2-s 中没有解决方案。您必须查看SqlBulkCopy类以进行批量插入。

于 2012-10-07T11:13:37.073 回答
0

通常启用和禁用对象跟踪只是连接或忽略更改跟踪事件处理程序。如果您尝试插入如此多的项目以致在尝试连接这些事件时变得太慢,那么您将遇到更大的问题。

请记住,LINQ to SQL 将为您添加的每条记录发出单独的数据库请求。这里的网络瓶颈肯定比仅仅连接更改跟踪事件是一个更大的问题。LINQ to SQl 不是批量插入的最佳选择。考虑对这种操作使用 SSIS/批量复制。

于 2012-10-05T13:21:44.943 回答