【问题标题】:TransactionScope Vs stored procedureTransactionScope 与存储过程
【发布时间】:2013-10-01 20:04:35
【问题描述】:

我有一个托管在多个服务器上的 Web 服务,随着流量的增加,竞争条件出现。我们在 Azure 上使用实体框架和主机,我一直在研究使用 TransactionScope 编写查询或将逻辑移动到存储过程中并在那里执行事务。

我想知道使用TransactionScope 或存储过程有什么区别?解决此问题的最佳做法是什么?

【问题讨论】:

标签: entity-framework tsql stored-procedures azure-sql-database race-condition


【解决方案1】:

我强烈建议您不要在存储过程中实现事务。这会极大地限制您在创建工作单元(即事务)时的灵活性。由于您使用的是 EF,我建议您在业务层代码中管理事务。这样,您可以更灵活地定义和管理工作单元。

【讨论】:

  • 我同意你的观点,除此之外,我认为代码的逻辑更易于维护。但我想知道,拥有 sproc 有什么好处吗?
  • 也许一个优点是事务可以比 TransactionScope 快几毫秒开始和提交。当然,如果您没有 .NET 业务层,那么 procs 就有意义了。
【解决方案2】:

TransactionScope 允许在您的 EF 语句中进行事务。所以整个 linq 语句将回滚。而在 SPROCS 中拥有事务只会回滚在 sproc 中处理的任何内容。

由于您使用的是允许您通过 Linq 与数据库进行交互的 EF,因此您最好使用 TransactionScope IMO

【讨论】:

    猜你喜欢
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    相关资源
    最近更新 更多