【问题标题】:Set Isolation level to DIRTY READ in Entity Framework with Informix使用 Informix 在实体框架中将隔离级别设置为 DIRTY READ
【发布时间】:2018-01-28 23:20:17
【问题描述】:

有没有办法使用 Informix 数据库或 LOCK MODE TO WAIT 在 Entity Framework 5 中设置隔离级别?

我尝试在创建 DbContext 对象时使用 SQL 查询设置隔离。

var dataContext = new DatabaseNameContext();  
dataContext.Database.ExecuteSqlCommand("SET ISOLATION TO DIRTY READ");

但这似乎不起作用。我仍然遇到锁定异常:

IBM.Data.DB2.DB2Exception (0x80004005): ERROR [IX000] [IBM][IDS/UNIX64]
Could not do a physical-order read to fetch next row.
(-107 ISAM error: record is locked.

我尝试将 TransactionScope 与 System.Transactions.IsolationLevel.ReadUncommitted 一起使用,但它抛出了异常:

IBM.Data.DB2.DB2Exception (0x80004005): ERROR [58005] [IBM][IDS/UNIX64]
SQL0998N Error occurred during transaction or heuristic processing.
Reason Code = "16". Subcode = "2-8004D026".

您能解释一下出了什么问题以及如何解决它吗?

【问题讨论】:

  • 第二个错误看起来您使用的是 DRDA 连接机制,而不是 SQLI — 对吗?坦率地说,如果 SET ISOLATION TO DIRTY READY 不起作用,我不知道如何解决这个问题。一种可能性是处理 DRDA 连接的代码覆盖了隔离级别,我不确定这有多大可能——这取决于最初的猜测是否有可能(我不确定我是否认为它是合理的)。
  • @JonathanLeffler 感谢您的快速回复。没错,我正在使用 DRDA 连接(实体框架仅适用于 DRDA 端口)。一个更新虽然!当我通过手动打开连接尝试 TransactionScope 时,它​​没有抛出异常,但我仍然看到锁。

标签: entity-framework-5 informix isolation-level dirtyread


【解决方案1】:

dataContext.Database.ExecuteSqlCommand("SET LOCK MODE TO WAIT 20");

它对我有用 :) 可能对某人有用...

【讨论】:

    猜你喜欢
    • 2016-09-02
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 2015-10-03
    • 2021-03-20
    相关资源
    最近更新 更多