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