首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体Framework6事务与存储过程中处理的事务

实体Framework6事务与存储过程中处理的事务
EN

Stack Overflow用户
提问于 2016-03-30 22:58:11
回答 2查看 406关注 0票数 2

我有一个执行事务的存储过程,代码是很久以前编写的,SP看起来像这样:

代码语言:javascript
复制
begin transaction
    begin try
        ...
        commit transaction
    end try
    begin catch
        ...
        rollback transaction
    end catch

现在。我知道EF6允许您更智能地使用事务:

代码语言:javascript
复制
using (var db = myDbContext)
    using (var dbTransaction = db.DataBase.BeginTransaction)
    {
        try
        {
            //do stuff...
            dbTransaction.Commit();
        }
        catch(Exception)
        {
            dbTransaction.Rollback();
        }
    }

我更喜欢EF方法,但我想知道从性能的角度来看,对事务使用EF还是使用封装事务的SP更好。

EN

回答 2

Stack Overflow用户

发布于 2016-03-31 03:11:14

使用T-SQL意味着您还在执行其他语句。这意味着您可以节省服务器往返时间。BeginTransaction执行一次往返。

如果您没有运行其他T-SQL,那么两个版本都会执行相同数量的往返。

往返是主要的费用。事务管理非常便宜。

这是一个已知的反模式:

代码语言:javascript
复制
    catch(Exception)
    {
        dbTransaction.Rollback();
    }

什么都不做。事务将在Dispose上回滚。这是多余的,并且吞噬了异常,这是一个非常糟糕的结果。

还要注意,您不必使用procs来执行T-SQL。

除非您认为这两个额外的往返是性能问题,否则您应该使用更简单、更可靠的C#事务管理。T-SQL在错误处理方面非常糟糕。

票数 0
EN

Stack Overflow用户

发布于 2016-03-31 02:40:31

从性能的角度来看,最好将存储过程与事务一起使用,因为SQL Server可以对其进行更多的优化。从最终用户的角度来看,这并不重要,除非您在非常大的表上进行操作。从开发人员的角度来看,使用EF要简单得多,这真的很重要。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36312605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档