sql-server - 如何让 Entity Framework 1.0 在访问特定实体时使用 nolock 提示

标签 sql-server entity-framework ado.net transactions

我想使用 Entity Framework 1.0 访问映射到表(称为文档)的实体(称为文档)但非常重要的一点是在读取数据时这张表没有被锁定。

有文章online , 和 stackoverflow建议为此使用事务范围。但我最初并不觉得为读取创建事务很舒服。

因此我的问题是:

  1. 当查询针对 SQL Server 2008 时,如何在为此实体创建 SQL 语句时强制 Entity Framework 使用 nolock 提示,而不指向存储过程?
  2. 如果这不可能,那么使用事务范围进行读取是否存在任何实际问题,还是我过于谨慎了?

最佳答案

在编写自定义 Entity Framework 提供程序之前,您不能强制 EF 使用 NOLOCK 提示,您将在其中控制所有 SQL 语句的创建。如果你想试试check these provider可用于包装现有 EF 提供程序的包装器。但它仍然需要解析和修改已创建的 SQL 语句,这可能是一项相当复杂的任务,对性能有很大影响。

据我了解,每个语句都在其自己的事务中运行。这就是锁定导致问题的原因。在具有较低隔离级别的 TransactionScope 中包装语句只是重新配置隐式事务。但请注意,未提交的读取也称为脏读取 - 您可以获得未提交的数据。

关于sql-server - 如何让 Entity Framework 1.0 在访问特定实体时使用 nolock 提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5497360/

相关文章:

sql-server - 'GO' 附近的语法不正确

sql - 在日期(无时间)上处理 SQL 查询的最佳方法是什么?

c# - 带有列名 c# 的 SqlDataReader.GetGuid?

sql-server - SQL Server - 即使在回滚的情况下如何确保身份字段正确递增

sql - 如何在SQL查询中不获取数据消息

c# - 是否可以使用 IComparable 比较 Entity Framework 中的实体?

c# - 在 LINQ 查询的选择部分调用方法

mysql - 用于执行 SQL 查询的 R 和 R-SQL API

sql - 使用 sp_help 的表结构

c# - 如何使用 EF Core 中的集合更新分离对象?