【发布时间】: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