【问题标题】:Table lock while transaction is not committed in Entity Framework?在实体框架中未提交事务时表锁定?
【发布时间】:2016-03-27 12:21:51
【问题描述】:

我想出了一个场景,在该场景中,我使用 C# 中的实体框架使用事务来保存数据。未提交时的表锁定。我正在使用下面的代码来保存数据。

tblCharge obj = new tblCharge();
obj.Plan = "DD";
obj.TotalAmount = 1500;

// Opening transaction
using (System.Data.Common.DbTransaction transaction((IObjectContextAdapter)dbContext).ObjectContext.Connection.BeginTransaction())
{
     dbContext.tblCharges.Add(obj);
     dbContext.SaveChanges();
     transaction.Commit();
}

当我在提交前保存数据并从 SQL Server 中的表中进行选择查询时,在事务提交之前它不会显示结果。

在使用事务时有什么方法不会发生表锁定?

【问题讨论】:

  • 不是表锁 - 只有您插入的那些行被锁定。表格的其余部分仍然可供选择 - 没问题。这种锁定行为是故意并且有充分的理由 - 不要试图规避它!
  • 感谢您的帮助

标签: c# .net entity-framework


【解决方案1】:

关系数据库中事务的全部意义在于使对数据库执行的更改对其他事务不可见,直到事务被提交。因此,要回答您的问题,在提交事务之前不可能让其他查询看到结果,因为这会违反事务的主要定义。

【讨论】:

  • 但关键是所有其他数据都应该可供选择。有没有办法。
  • @AlinaDilshad:数据 IS 可供选择 - 只要事务提交,数据就会真正永久存储。在提交之前,数据还没有真正在数据库中......所以你不应该在提交之前选择它!
猜你喜欢
  • 2017-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
  • 2010-12-10
相关资源
最近更新 更多