我需要像下面进行交易:EF6提交的数据读
- 开始交易:在这里,我呼吁
context.Database.BeginTransaction()
(请注意context
这里就不下同一个的问题,我想读未提交) - 保存联系(使用存储过程完成):此usp也有一个事务。
- 创建基于接触一些其他记录
- 提交
我遇到的问题是,在步骤3,我需要从数据库中读取一些数据(使用EF应用端做),这尚未提交(从第2步开始)。我试图这样做,但它不工作:
context.Database.ExecuteSqlCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;");
var contact = context.Contact.SingleOrDefault(x => x.ContactId == intId);
context.Database.ExecuteSqlCommand("SET TRANSACTION ISOLATION LEVEL READ COMMITTED;");
我有调试器中运行,并在其中contact
,正在获取的暂停,但什么都不会返回。
如果我查询的SSMS(SQL服务器MGMT工作室)相同的记录,它返回的结果:
set transaction isolation level read uncommitted
select * from Contact c where c.ContactId = 9999
问题
- 我怎样才能读取使用EF6未提交的数据?一些在线搜索引导我创建一个自定义拦截器,但我真的需要吗?
- 许多文章建议不读取未提交的数据,但我想不出另一种方式来实现这一点。在那儿?
实际上步骤1是什么?如果你做了'var tr = context.Database.BeginTransaction();',那么使用同样''context''的未来操作应该看到那个事务中未提交的变化。 –
@IvanStoev它只是'this.context.Database.BeginTransaction();'但这与问题中的不一样。 – CodingYoshi
我明白了。然后尝试'BeginTransaction(System.Data.IsolationLevel.ReadUncommitted)',它似乎工作(快速测试)。 –