我想使用 Entity Framework 1.0 访问映射到表(称为文档)的实体(称为文档)但非常重要的一点是在读取数据时这张表没有被锁定。
有文章online , 和 stackoverflow建议为此使用事务范围。但我最初并不觉得为读取创建事务很舒服。
因此我的问题是:
- 当查询针对 SQL Server 2008 时,如何在为此实体创建 SQL 语句时强制 Entity Framework 使用 nolock 提示,而不指向存储过程?
- 如果这不可能,那么使用事务范围进行读取是否存在任何实际问题,还是我过于谨慎了?
最佳答案
在编写自定义 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/