C# 在LinqToSql中向数据库插入新实体并关闭跟踪更改

C# 在LinqToSql中向数据库插入新实体并关闭跟踪更改,c#,.net,linq-to-sql,C#,.net,Linq To Sql,当我尝试向数据库添加新实体时,Datacontext抛出“当前Datacontext实例未启用对象跟踪”异常,如下所示 db.Posts.InsertOnSubmit(new entity); 启用跟踪更改对我来说不是一个解决方案,因为当我有许多插入操作时,它太慢了 在这种情况下,什么是解决方案?通常启用和禁用对象跟踪只是连接或忽略更改跟踪事件处理程序。如果您试图插入的项目太多,以至于在尝试连接这些事件时速度太慢,那么您将遇到更大的问题 请记住,LINQtoSQL将为要添加的每个记录发出单独的

当我尝试向数据库添加新实体时,Datacontext抛出“当前Datacontext实例未启用对象跟踪”异常,如下所示

db.Posts.InsertOnSubmit(new entity);
启用跟踪更改对我来说不是一个解决方案,因为当我有许多插入操作时,它太慢了


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

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


请记住,LINQtoSQL将为要添加的每个记录发出单独的数据库请求。这里的网络瓶颈肯定是一个比仅仅连接变更跟踪事件更大的问题。LINQtoSQL不是批量插入的最佳选择。考虑使用SSIS/WORD副本进行此类操作。

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


请记住,LINQtoSQL将为要添加的每个记录发出单独的数据库请求。这里的网络瓶颈肯定是一个比仅仅连接变更跟踪事件更大的问题。LINQtoSQL不是批量插入的最佳选择。考虑使用SSIS /大块拷贝进行这种操作。

< P>你不能有蛋糕也吃它。

取决于数据库结构,可以考虑使用两个DATACONTEX。 一个启用变更跟踪,一个禁用


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

您不能既有蛋糕又吃蛋糕

取决于数据库结构,可以考虑使用两个DATACONTEX。 一个启用变更跟踪,一个禁用

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