【发布时间】:2019-06-30 06:37:04
【问题描述】:
我正在尝试使用 .NET 4.5、EF5(具有二级缓存和延迟加载的导航属性)和 SQL Server 2014 调试 ASP.NET 应用程序中的性能问题。我们在SQL 服务器。当我查看锁定事务时,它们包含一个非常快速的 UPDATE,然后是一个非常大的 SELECT。 UPDATE 表面上是必要的,但我很困惑为什么 SELECT 在同一个事务中运行(以及为什么要选择任何东西)。根本问题是 UPDATE 语句中引用的表在 SELECT 语句期间被锁定。
我们使用存储库模式从数据库中获取数据,并使用 DbContext.SaveChanges() 来提交更改。我无法弄清楚 EF 怎么可能产生一个同时存在写入和读取的事务,并且当我尝试搜索 Google 时没有得到相关结果。
我们有许多进入系统的接口,还有几个在数据库上工作的控制台应用程序,但它们都经过相同的 .NET 和 EF 设置/版本。
我认为它必须通过 SaveChanges,因为这是(AFAIK)唯一一次将内容写入数据库。
这里有没有人暗示这些锁定事务是如何产生的?
【问题讨论】:
-
在 SaveChanges 中预期更新后选择。但是由 SaveChanges() 引起的更新应该获得足够的锁以允许后续的 SELECT 执行而不会阻塞。因此,您需要诊断 SELECT 以找出它们长时间运行的原因。例如,如果您缺少主键索引,则 SELECT 可能需要扫描。
标签: asp.net sql-server entity-framework entity-framework-5 .net-4.5