Moje polecenie ciągle przekracza limit czasu, więc muszę zmienić domyślną wartość limitu czasu polecenia.
Znalazłem myDb.Database.Connection.ConnectionTimeout
, ale to jest readonly
.
Jak mogę ustawić limit czasu polecenia w Entity Framework 5 ?
Moje polecenie ciągle przekracza limit czasu, więc muszę zmienić domyślną wartość limitu czasu polecenia.
Znalazłem myDb.Database.Connection.ConnectionTimeout
, ale to jest readonly
.
Jak mogę ustawić limit czasu polecenia w Entity Framework 5 ?
Database.CommandTimeout
nie jest już tylko do odczytuDatabase.Connection.ConnectionTimeout
. W każdym razie powiedziałbym, żeDatabase.CommandTimeout
jest to właściwe rozwiązanie w przypadku, gdy zapytanie przekracza limit czasu (System.Data.Entity.Core.EntityCommandExecutionException
zawiera wyjątekSystem.Data.SqlClient.SqlException: Timeout expired.
).Odpowiedzi:
Wypróbuj to w swoim kontekście:
Jeśli chcesz zdefiniować limit czasu w ciągu połączenia, użyj
Connection Timeout
parametru podobnego do następujących parametrów połączenia:Źródło: instrukcje: definiowanie parametrów połączenia
źródło
ObjectContext
tego konstruktora, czasami polecenia konsoli PowerShell / NuGet zawodzą w cykliczny sposób .Możesz użyć
DbContext.Database.CommandTimeout = 180;
To całkiem proste i nie wymaga obsady.
źródło
Fluent API
formy EF.Mój częściowy kontekst wygląda tak:
Zostawiłem
SetCommandTimeOut
publiczne, więc tylko procedury, których potrzebuję, zajmują dużo czasu (ponad 5 minut), modyfikuję zamiast globalnego limitu czasu.źródło
W wygenerowanym kodzie konstruktora powinien wywołać
OnContextCreated()
Dodałem tę częściową klasę, aby rozwiązać problem:
źródło
Rozszerzyłem odpowiedź Ronniego o płynną implementację, abyś mógł z niej korzystać w następujący sposób:
dm.Context.SetCommandTimeout(120).Database.SqlQuery...
źródło
Dla bazy danych pierwsze podejście:
Nadal możemy ustawić go w konstruktorze, nadpisując szablon ContextName.Context.tt T4 w ten sposób:
Database.CommandTimeout = 180;
to ostra zmiana.Wygenerowane dane wyjściowe są następujące:
Jeśli zmienisz model bazy danych, ten szablon pozostanie, ale aktualna klasa zostanie zaktualizowana.
źródło
System.Configuration.ConfigurationManager.AppSettings["keyname"]
sztywno , możesz użyć @shasTo samo, co inne odpowiedzi, ale jako metoda rozszerzenia:
źródło
Właśnie natknąłem się na ten problem i rozwiązałem go, aktualizując plik konfiguracyjny aplikacji. W przypadku danego połączenia określ „Limit czasu połączenia = 60” (używam platformy jednostek w wersji 5.0.0.0)
Ustawienie ConnectionTimeout
źródło
Możesz użyć tego prostego:
dbContext.Database.SetCommandTimeout(300);
źródło