【问题标题】:ASP.NET MVC / C# / SQL Server Application : Issue with multiple users updating a table same timeASP.NET MVC / C# / SQL Server 应用程序:多个用户同时更新表的问题
【发布时间】:2016-10-20 16:33:59
【问题描述】:

我正在开发一个 ASP.NET MVC/C#/SQL Server 应用程序,并且我有一个事务来更新多个表。

using (var scope = TransactionHelpers.CreateTransactionScopeRequiresNew())
{
      // CRUD operations for table 1, table 2....
}

当单个用户调用上述方法时,它可以正常工作。但是,如果 2 个用户几乎同时调用上述方法,则一个请求有效,另一个请求失败,可能是由于之前的事务锁定了表。

那么解决这个问题的最佳方法是什么?

【问题讨论】:

  • 你的事务的隔离级别是多少?
  • 使用存储过程更新
  • 它是 ReadCommitted 隔离级别
  • 不幸的是,我不允许使用存储过程,因为我们在整个项目中都使用内联 SQL。
  • 你使用实体框架吗?

标签: c# asp.net-mvc transactions


【解决方案1】:

默认隔离模式为read committed,完全符合您 99% 的需求,例如。读取数据。当您想要保存对数据库所做的更改(创建、更新、删除)时,Entity Framework 足够聪明,可以在您不通知的情况下在后台创建事务来包装更改。您可以确定将保存所有内容或丢弃所有更改(原子)。

通过在实体框架中使用事务,您可以更改该行为并强制事务范围内的每个 CRUD 操作以serializable 隔离模式执行,这是最高和最阻塞的类型。任何进程都无法访问您在事务期间接触过的表(甚至是从中读取)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 2012-10-21
    相关资源
    最近更新 更多