Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Phân luồng và SqlFileStream. Quy trình không thể truy cập tệp được chỉ định vì nó đã được mở trong một giao dịch khác

Giao dịch không chuyển vào Parallel.ForEach , bạn phải thực hiện giao dịch theo cách thủ công.

//Switched to a thread safe collection.
var documents = new ConcurrentQueue<ExtractedContent>();
using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
    var attachments = await dao.GetAttachmentsAsync();
    //Grab a reference to the current transaction.
    var transaction = Transaction.Current;
    Parallel.ForEach(attachments, a =>
    {
        //Spawn a dependant clone of the transaction
        using (var depTs = transaction.DependentClone(DependentCloneOption.RollbackIfNotComplete))
        {
            documents.Enqueue(a.ToDbDocument());
            depTs.Complete();
        }
    });

    ts.Complete();
}

Tôi cũng đã chuyển từ List<ExtractedContent> thành ConcurrentQueue<ExtractedContent> bởi vì bạn không được phép gọi .Add( trên một danh sách từ nhiều chủ đề cùng một lúc.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server XML tồn tại ()

  2. T-Sql dường như đang đánh giá câu lệnh If ngay cả khi điều kiện không đúng

  3. Từ khoá Không được Hỗ trợ:Siêu dữ liệu

  4. Khóa leo thang - Điều gì đang xảy ra ở đây?

  5. Thêm một cột được tính toán vào một bảng hiện có trong SQL Server