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

MultipleActiveResultSets cho mô hình dữ liệu thực thể postgresql và ado.net

Nhiều Bộ Kết quả Hoạt động (MARS) là một tính năng được giới thiệu trong SQL Server 2005 và không có sẵn trong các hệ thống cơ sở dữ liệu khác như postgres, vì vậy bạn sẽ không thể bật nó trong chuỗi kết nối.

Lỗi bạn đang gặp phải là kết quả của việc cố gắng thực hiện hai truy vấn trên một trình đọc dữ liệu mở. Khi sử dụng tức là Entity Framework, điều này thường là xảy ra khi bạn có Tải chậm được bật và các thuộc tính lười biếng được tải trong cùng một trình đọc như các lệnh gốc. Ví dụ:một mã tương tự với mã này có thể tạo ra lỗi này:

var users = context.Users.Where(u => u.FirstName.StartsWith("Ha"));
foreach (var user in users)
{
    Console.WriteLine(user.Address.StreetName);
}

Trong dòng đầu tiên, không có dữ liệu nào được tìm nạp vì chúng tôi chỉ chuẩn bị một truy vấn Linq. Khi chúng ta bắt đầu foreach một DataReader được mở và tập hợp người dùng đáp ứng các điều kiện của chúng tôi được truy vấn nhưng trình đọc không bị đóng. Sau đó, bên trong foreach chúng tôi truy cập thuộc tính Địa chỉ của Người dùng được tải chậm. Tải chậm này gây ra thực thi truy vấn trên cùng một DataReader đang mở và đó là khi ngoại lệ xảy ra. Nếu tôi muốn loại bỏ lỗi, tôi có thể chỉ cần thêm ToList() (hoặc bất kỳ thứ gì khiến truy vấn thực hiện) ở cuối dòng như thế này:

var users = context.Users.Where(u => u.FirstName.StartsWith("Ha")).ToList();

Hy vọng điều này sẽ giúp bạn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trình tự hóa và xác thực ngang hàng cho Postgres?

  2. Làm cách nào để chuyển một bảng hoặc các hàng cho một hàm trong Postgresql?

  3. Postgresql DROP TABLE không hoạt động

  4. Chọn số lượng hàng trong một bảng khác trong câu lệnh Postgres SELECT

  5. cursor.execute (INSERT INTO im_entry.test (+ entrym +) VALUES ('+ p +');)