Linq-to-sql上下文数据库连接处理

And*_*bel 7 .net c# linq-to-sql

linq-to-sql datacontext如何保持数据库连接打开的规则是什么?

当我们对SubmitChanges()每个更新的实体进行一些性能测试而不是SubmitChanges()整个批次实体的性能测试时,问题出现了.结果:

在一个SubmitChanges()调用中插入3000个项目...持续时间:1318ms

在Transactionscope中的一个SubmitChanges()调用中插入3000个项目...持续时间:1280ms

在各个SubmitChanges()调用中插入3000个项目......持续时间:4377ms

在事务中的单个SubmitChanges()调用中插入3000个项目...持续时间:2901ms

请注意,在SubmitChanges()为每个更改的实体执行单独操作时,将所有内容放在事务中可以提高性能,这对我们来说非常意外.在sql server profiler中,我们可以看到SubmitChanges()事务中的各个调用不会为每次调用重置数据库连接,而不是没有事务的调用.

在什么情况下数据上下文保持连接打开?有没有关于linq-to-sql如何处理连接的详细文档?

cas*_*One 3

你没有展示整个图片;默认情况下, LINQ-to-SQL 会将调用包装SubmitChanges在事务中。如果您将其与另一个事务包装在一起,那么您将不会看到连接重置;直到所有调用SubmitChanges完成并且外部事务提交后,它才能完成。