PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

MultipleActiveResultSets за модел на данни за postgresql и ado.net

Множество активни набори от резултати (MARS) е функция, въведена в SQL Server 2005 и не е налична в други системи за бази данни като postgres, така че няма да можете да я включите в низа за връзка.

Грешката, с която се сблъсквате, е резултат от опит за извършване на две заявки на един отворен четец на данни. Когато използвате т.е. Entity Framework това обикновено се случва, когато имате Мързеливо зареждане е включено и мързеливите свойства се зареждат в същия четец като родителските обекти. Например код, подобен на този, може да доведе до тази грешка:

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

В първия ред не се извличат данни, тъй като сме подготвили само Linq заявка. Когато стартираме foreach DataReader се отваря и колекцията от потребители, която отговаря на нашите условия, се запитва, но четецът не се затваря. След това вътре в foreach стигаме до свойството Address на User, което се зарежда отложено. Това отложено зареждане причинява изпълнение на заявка на същия отворен DataReader и тогава възниква изключението. Ако исках да се отърва от грешката, можех просто да добавя ToList() (или нещо, причиняващо изпълнението на заявката) до края на реда по този начин:

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

Надяваме се, че това ще ви помогне.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка в PostgreSQL:Фатално:потребителското име на ролята не съществува

  2. Postgresql изберете, докато се достигне определена обща сума

  3. Важна ли е позицията на колоната с идентификатор в Postgresql?

  4. Обявяване на repmgr 2.0

  5. Показване на месечни суми от множество колони в PostgreSQL