2009-08-15 11 views
27

Kiedy instancję obiektu "Entities" w Entity Framework i kilka kwerend za pomocą tego obiektu Entities, co dzieje się z połączeniami?Kiedy Entity Framework otwiera i zamyka połączenia z bazą danych?

  • Czy otwiera połączenie, gdy wykonuję instancję obiektu, i zamyka je, gdy się go pozbywa?
  • Czy otwiera i zamyka połączenie dla każdego pojedynczego zapytania, które wykonuję?

W obu przypadkach, czy można to zmienić, aby zrobić to samo?

+2

Wow @ pb2q, która była bardzo ważną edycją 6-letniego pytania! Ładnie wykonane! –

+0

dMagiola: bez problemu. Chętnie pomożemy przy każdej poprawie: ważnej lub innej, starej lub nowej. Nie przestawaj pytać kumpla! – pb2q

Odpowiedz

3

Zachowanie zmieniło się nieco w wersji EF6, pozwalając na późniejsze przekazanie otwartych połączeń lub otwarcie połączenia EF. Sprawdź https://msdn.microsoft.com/en-us/library/dn456849(v=vs.113).aspx

+0

Dziękuję bardzo za link - czy nie ma sposobu, aby zadeklarować otwarte połączenie za pomocą C# 's' using' klauzuli? na przykład 'using (var conn = openAConnection())'. Udostępniony link pokazuje ręczne otwarcie połączenia, które zostanie zamknięte, gdy powiązany kontekst zostanie usunięty, co wydaje się być tak nieintuicyjne i hackowe. – aaaaaa

+0

@aaaaa - może patrzysz na EF5 i poprzedni przykład? W drugim przykładzie kodu znajduje się klauzula 'using', jak chcesz. Pamiętaj, że musisz się tylko o to martwić, jeśli rzeczywiście chcesz coś zrobić ręcznie z połączeniem, np. wykonywać polecenia poza EF. Jeśli tego nie potrzebujesz, nie musisz w ogóle myśleć o otwieraniu i zamykaniu połączenia. – Rory

+0

"Zachowanie w ES6 i przyszłych wersjach": 'conn.Open();'. To linia, która mnie irytuje. I tak, potrzebuję tego najwyraźniej, aby uzyskać wiele zestawów wyników z procedury przechowywanej (próbując zachować żądania db do jednego na widok) – aaaaaa

Powiązane problemy