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

Vla*_*irs 5 sql sql-server performance entity-framework blocking

我听说SQL Server SELECT语句导致阻塞

因此,我有带有EF和SQL Server 2008的MVC应用程序,并且它与另一个经常写入一些数据的应用程序共享数据库。MVC应用程序会基于来自另一个应用程序的数据生成一些实时报告。

因此,考虑到这种情况,是否有可能在生成报告时阻止某些应用程序试图写入数据的表?

我尝试在生成报表时进行一些手动插入和更新,并且处理起来还不错。我误会了吗?

Ger*_*old 6

这就是为什么在 Sql Server 的 Entity Framework 6 中数据库创建的默认设置已更改的原因之一

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

因此,与由EF 5中创建并降低数据库,READ_COMMITTED_SNAPSHOTOFF 这意味着

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

当然,您可以随时自行更改设置:

ALTER DATABASE MyDb SET READ_COMMITTED_SNAPSHOT ON
Run Code Online (Sandbox Code Playgroud)