Sql 实体框架可以选择阻止表吗?

Sql 实体框架可以选择阻止表吗?,sql,sql-server,performance,entity-framework,blocking,Sql,Sql Server,Performance,Entity Framework,Blocking,我听说了 因此,我有一个带有EF和SQLServer2008的MVC应用程序,它与另一个应用程序共享数据库,该应用程序非常频繁地写入一些数据。MVC应用程序根据来自另一个应用程序的数据生成一些实时报告 因此,在这种情况下,在生成报告时,是否可能会阻止其他应用程序尝试写入数据的某些表 我试图在生成报告时进行一些手动插入和更新,并且处理得很好。我被误解了吗 readuncommitted应该会有帮助,因为它不会对正在检索的数据发出共享锁。因此,它不会打扰您的其他应用程序集中更新数据。另一个选项是在长

我听说了

因此,我有一个带有EF和SQLServer2008的MVC应用程序,它与另一个应用程序共享数据库,该应用程序非常频繁地写入一些数据。MVC应用程序根据来自另一个应用程序的数据生成一些实时报告

因此,在这种情况下,在生成报告时,是否可能会阻止其他应用程序尝试写入数据的某些表


我试图在生成报告时进行一些手动插入和更新,并且处理得很好。我被误解了吗

readuncommitted应该会有帮助,因为它不会对正在检索的数据发出共享锁。因此,它不会打扰您的其他应用程序集中更新数据。另一个选项是在长时间运行的SELECT上使用快照隔离级别。这种方法保留了选定数据的数据完整性,但需要更高的CPU成本和更高的tempdb使用率

这就是为什么在Entity Framework 6 for Sql Server中出现默认值的原因之一:

EF现在与SQL Server数据库的“最佳实践”保持一致,即将数据库的READ_COMMITTED_SNAPSHOT设置配置为ON。这意味着,默认情况下,每次进行更改时,数据库都会创建自身的快照。在对实际数据库执行更新时,将对快照执行查询

因此,对于EF 5和更低版本创建的数据库,
READ\u COMMITTED\u SNAPSHOT
OFF

数据库引擎使用共享锁防止其他事务在当前事务运行读取操作时修改行

当然,您始终可以自己更改设置:

ALTER DATABASE MyDb SET READ_COMMITTED_SNAPSHOT ON

无论实体框架如何,都需要设置SQL Server,这是我在SPs中设置的
set TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
,用于从同样具有重写操作的表中读取记录。我不确定如何使用Entity framework实现这一点…@Habib我不关心EF端的读取,我关心的是在另一个应用程序中的写入SELECT的可能重复会导致阻塞,EF也会为SQL Server生成SELECT语句,如果读取花费太多时间,那么肯定会发生阻塞。@Habib我不介意SELECT是否会被阻塞。我希望避免阻止更新/插入。看起来读未提交的作品是为了避免选择块而不是插入/更新