我需要使用EF Core在一张桌子上执行几项任务(重新计算)。开始计算时,其他任何事务都不应开始。
使用Database.BeginTransactionAsync
/ TransactionScope
可以做到吗?
类似这样的东西:
我看到了四种可能的方法,但是选项1、2和4不起作用:
DbContext.Database.BeginTransaction
(如果有2个方法(对API进行了2次调用)对此进行了调用,则第二个应等待)new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)
(如果有2个方法(对API进行了2次调用)对此进行了调用,则第二个应等待)lock(static_variable)
对数据库/表进行任何锁定都会更好,因为这可以确保例如在Management Studio中完成工作。我也尝试过:
BEGIN TRANSACTION;
SELECT top 1 1 FROM [Transactions] WITH (TABLOCKX, HOLDLOCK)
但是我可以在其他Management Studio中呼叫select
,因此表未锁定。