5

Vì vậy, tôi có một DBContext, và tôi đang làm các thao tác sau:luận gì xác định thứ tự chèn của Entity Framework 6

dbContext.SomeTables1.Add(object1) 
dbContext.SomeTables2.AddRange(objectArray2) 
dbContext.SomeTables3.AddRange(objectArray3) 
dbContext.SaveChanges(); 

EF không chèn hồ sơ db theo thứ tự này, nó chèn chúng theo thứ tự ngẫu nhiên. Để chèn chúng vào cùng một thứ tự, tôi phải thực hiện dbContext.SaveChanges() sau mỗi lần thêm. Đây không phải là một giải pháp hiệu quả và trong trường hợp của tôi, nó mất 10 giây để làm tất cả các chèn của tôi, trong khi thứ tự ngẫu nhiên với một lần tiết kiệm mất khoảng 3 giây.

N.B. Tôi cần đúng thứ tự để giải quyết vấn đề bế tắc.

Câu hỏi của tôi là:

  • là vấn đề này được giải quyết trong EF7?
  • Tôi có thể cấu hình EF và xác định thứ tự ngẫu nhiên, có đảm bảo rằng nó sẽ nhất quán với cùng một thứ tự ngẫu nhiên hoặc có thay đổi giữa các yêu cầu không? (Tôi có thể áp dụng mã khác của mình nếu câu trả lời cho câu hỏi này là tích cực).
  • Có cách nào tốt hơn để duy trì thứ tự hơn dbContext.SaveChanges() trên mọi bổ sung không?
+0

Nó sẽ không * thực sự * giúp bạn, nhưng nó là thú vị đọc mặc dù ... http://stackoverflow.com/a/11521882/265165 – thmshd

Trả lời

3
  • Không có cách nào bạn có thể chỉ định thứ tự lưu trong EF6 hoặc EF7.
  • Vấn đề không được giải quyết trong EF7 vì đây không phải là vấn đề.
  • Trình tự sẽ giống nhau nếu người tiền nhiệm đều giống nhau (trong đó có khả năng sẽ hiếm khi xảy ra)

Khi bạn gọi SaveChanges, tất cả các đơn vị được đặt hàng từ một trật tự nội bộ trong phương pháp “ProduceDynamicCommands”, sau đó sắp xếp lại bằng phương pháp “TryTopologicalSort” lặp vòng để thêm lệnh không có người tiền nhiệm (nếu bạn thêm A và B và A phụ thuộc B, thì B sẽ được chèn trước A)

Bạn còn lại để chèn thêm.

Vì bạn mất 3 giây để thực hiện chèn, tôi cho rằng bạn có hàng nghìn thực thể và thực hiện chèn hàng loạt có thể cải thiện hiệu suất của bạn để giảm 10 giây xuống ít hơn 3 giây!

Đây là 2 thư viện tôi có thể khuyên bạn nên:

Disclaimer: Tôi là chủ sở hữu của dự án Entity Framework Extensions.

0

Bạn có thể đặt hàng trước khi sử dụng chức năng Thêm và sau đó sử dụng lưu? Nó sẽ giúp/có thử của bạn này?

+0

"nó" là gì? Làm thế nào để bạn muốn tôi đặt chúng trước khi chèn chúng, câu trả lời này không rõ ràng. – Adam

+0

"nó", ngữ cảnh, khi bạn lưu bạn lưu ngữ cảnh và các đối tượng bên trong nó. Bên trong dbcontext, có bất kỳ mảng đối tượng nào bạn đang chèn không? –

+1

Tôi không chắc chắn nếu bạn hiểu câu hỏi hoặc nếu tôi không hiểu câu trả lời của bạn. Tôi sắp xếp các bổ sung nhưng kết quả SQL (thông qua lược tả) cho thấy rằng chúng được tổ chức một cách ngẫu nhiên, không giống như cách chúng được thêm vào. Đây là một hành vi được biết đến trong EF. – Adam

Các vấn đề liên quan