Entity framework TransactionScope与存储过程

Entity framework TransactionScope与存储过程,entity-framework,tsql,stored-procedures,azure-sql-database,race-condition,Entity Framework,Tsql,Stored Procedures,Azure Sql Database,Race Condition,我有一个web服务托管在多个服务器上,随着流量的增加,竞争条件出现。我们在Azure上使用实体框架和主机,我一直在研究使用TransactionScope编写查询,或者将逻辑移动到存储过程中并在那里执行事务 我想知道使用TransactionScope或存储过程之间有什么区别?解决此问题的最佳做法是什么?我强烈建议您不要在存储过程中实现事务。这会极大地限制您在创建工作单元(即事务)时的灵活性。由于您使用的是EF,我鼓励您在业务层代码中管理事务。这样,您在定义和管理工作单元方面就有了更大的灵活性。

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


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

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

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


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

我同意您的看法,而且,我认为在代码上使用逻辑更易于维护。但我想知道,使用存储过程有什么好处吗?也许一个优点是事务的启动和提交速度比TransactionScope快几毫秒。当然,如果您没有.NET业务层,那么procs是有意义的。EF6具有“改进的事务支持”。所以这也可能是你的选择