关于c#:在事务中上载文件时防止数据库锁定

Prevent database locks when uploading a file in a transaction

我具有一项功能,用户可以查看所有上传的文件。为此,我要在数据库中插入一条记录,然后将文件上传到AWS S3。我正在使用记录中的ID作为文件名。例如,如果id为53,则文件名为53.pdf。插入记录和文件上载都在TransactionScope中。我担心在此长时间的操作中数据库将被锁定。有没有一种方法可以防止数据库被锁定?


I am worried the database will be locked during this long operation. Is there a way to prevent the database from being locked?

您不必担心数据库被阻塞,唯一需要对数据库进行排他锁的事务是Alter数据库语句,它们需要排他锁,并且有可能阻塞整个数据库。

您不必担心对象级事务会阻塞数据库

下面的

是示例锁屏幕截图,当我并行运行两个inserts语句时拍摄。如您对Insert所见,SQLServer正在获取对象的(IX lock)状态,该对象声明"我将仅在下面的层上锁定某些内容"表... "

因此,在这种情况下,如果要运行另一个需要从同一表中选择id并将其插入到同一表中的事务,则select将被阻止(在运行默认隔离级别的普通SQLServer上)。插入...

enter

我不确定,是否也适用于AWS中的SQLServer ??。.您可以通过在查询下面运行(检查隔离级别desc列)进行检查。

1
select * from sys.databases