在LinqToSql中通过关闭跟踪更改将新实体插入数据库

时间:2012-10-05 11:55:47

标签: c# .net linq-to-sql

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

db.Posts.InsertOnSubmit(new entity);

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

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

2 个答案:

答案 0 :(得分:1)

你不能吃蛋糕也不能吃。

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

但是,每条记录仍然会有一个插入语句。这就是linq-2-sql如何运作,并且在l-2-s内没有解决方案。您必须查看SqlBulkCopy类以获取bulkinsertions。

答案 1 :(得分:0)

通常,启用和禁用对象跟踪只需连接或忽略更改跟踪事件处理程序。如果您尝试插入这么多项目,在尝试连接这些事件时变得太慢,则会出现更大的问题。

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