thể trùng lặp:
Entity Framework with NOLOCKLàm thế nào để buộc Entity Framework không để khóa cơ sở dữ liệu
Tôi đang sử dụng EF4 và Net 4 để tải một số XML từ một tập tin vào một cơ sở dữ liệu .
Tôi có một lớp kết thúc tốt đẹp quanh ObjectContext và có các phương thức thêm đối tượng được ghép từ tệp XML vào các EntityCollections khác nhau đại diện cho các bảng của tôi.
Mỗi tệp XML chứa khoảng 200.000 đối tượng trung bình, lớp trình bao bọc tạo ObjectContext khi xây dựng và lưu trữ tham chiếu trong biến lớp riêng tư cục bộ sau đó được sử dụng bởi các phương thức.
Khi tôi đã hoàn tất việc tạo các đối tượng mà tôi gọi:
entities.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
Điều này tạo ra một giao dịch trên máy chủ đó là theo thiết kế EntityFramework. Tuy nhiên giao dịch này hoàn toàn khóa xuống DB của tôi ngay cả trên các bảng không được thêm vào.
Tôi đã thử nhiều thứ khác nhau để thử và nhận vòng bao gồm cả gói này lưu các thay đổi trong một TransactionScope như thế này:
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress,
new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted }))
{
entities.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
transaction.Complete();
}
Tôi cũng đã cố gắng tạo ra TransactionScope trước khi tạo ObjectContext trong một nỗ lực để ảnh hưởng đến tiềm ẩn giao dịch đang được sử dụng trong SaveChanges.
Lý tưởng nhất là tôi muốn tải nhiều tệp cùng lúc, nhưng điều này sẽ không thể nếu DB bị khóa trong khi lưu thay đổi.
Có ai biết một công việc xung quanh vấn đề này không? Có cách nào để buộc EntityFramework không sử dụng giao dịch không?
Cảm ơn bạn đã giúp đỡ trước.
James
Tôi nghĩ rằng vấn đề ở đây là bạn đang sử dụng TransactionScopeOption.Supress. Hãy thử sử dụng Bắt buộc. –