Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aby używać programu Entity Framework do wykonywania zapytań, wstawiania, aktualizowania i usuwania danych przy użyciu obiektów platformy .NET, należy najpierw utworzyć model , który mapuje jednostki i relacje zdefiniowane w modelu na tabele w bazie danych.
Po utworzeniu modelu podstawowa klasa, z którą aplikacja wchodzi w interakcję, to System.Data.Entity.DbContext (często nazywana klasą kontekstu). Można używać DbContext skojarzonego z modelem, aby:
- Pisanie i wykonywanie zapytań
- Materializowanie wyników zapytania jako obiektów jednostki
- Śledzenie zmian wprowadzonych w tych obiektach
- Utrwalanie zmian obiektu w bazie danych
- Wiązanie obiektów w pamięci z kontrolkami interfejsu użytkownika
Ta strona zawiera wskazówki dotyczące zarządzania klasą kontekstu.
Definiowanie klasy pochodnej DbContext
Zalecanym sposobem pracy z kontekstem jest zdefiniowanie klasy pochodzącej z elementu DbContext i uwidacznianie właściwości DbSet reprezentujących kolekcje określonych jednostek w kontekście. Jeśli pracujesz z Projektantem EF, kontekst zostanie wygenerowany dla Ciebie. Jeśli pracujesz z aplikacją Code First, zazwyczaj samodzielnie napiszesz kontekst.
public class ProductContext : DbContext
{
public DbSet<Category> Categories { get; set; }
public DbSet<Product> Products { get; set; }
}
Po utworzeniu kontekstu należy wykonać zapytanie, dodać (przy użyciu metody Add lub Attach) lub usunąć (przy użyciu Remove) jednostki w kontekście za pomocą tych właściwości. Dostęp do właściwości DbSet w obiekcie kontekstu rozpoczyna zapytanie, które zwraca wszystkie encje określonego typu. Pamiętaj, że uzyskiwanie dostępu do właściwości nie spowoduje wykonania zapytania. Zapytanie jest wykonywane, gdy:
- Jest on wyliczany przez instrukcję
foreach(C#) lubFor Each(Visual Basic). - Jest on wyliczany przez operację kolekcji, taką jak
ToArray,ToDictionarylubToList. - Operatory LINQ, takie jak
FirstlubAny, są określone w najbardziej zewnętrznej części zapytania. - Wywoływana jest jedna z następujących metod:
Loadmetoda rozszerzenia,DbEntityEntry.Reload,Database.ExecuteSqlCommand, iDbSet<T>.Find, jeśli jednostka z określonym kluczem nie zostanie jeszcze załadowana w kontekście.
Okres istnienia
Okres istnienia kontekstu rozpoczyna się po utworzeniu wystąpienia i kończy się po usunięciu wystąpienia lub usunięciu pamięci. Użyj using, jeśli chcesz, aby wszystkie zasoby kontrolowane przez kontekst były zwalniane na końcu bloku kodu. W przypadku using kompilator automatycznie tworzy blok try/finally i wywołuje metodę dispose w bloku finally.
public void UseProducts()
{
using (var context = new ProductContext())
{
// Perform data access using the context
}
}
Poniżej przedstawiono niektóre ogólne wskazówki dotyczące podejmowania decyzji o okresie istnienia kontekstu:
- Podczas pracy z aplikacjami internetowymi należy używać wystąpienia kontekstu dla każdego żądania.
- Podczas pracy z programem Windows Presentation Foundation (WPF) lub Windows Forms użyj wystąpienia kontekstu dla każdego formularza. Dzięki temu można korzystać z funkcji śledzenia zmian dostępnych w kontekście.
- Jeśli wystąpienie kontekstu jest tworzone przez kontener do iniekcji zależności, zwykle obowiązkiem kontenera jest usunięcie kontekstu.
- Jeśli kontekst jest tworzony w kodzie aplikacji, pamiętaj, aby usunąć kontekst, gdy nie jest już wymagany.
- Podczas pracy z długotrwałym kontekstem należy wziąć pod uwagę następujące kwestie:
- W miarę ładowania do pamięci większej liczby obiektów i ich odwołań, zużycie pamięci przez kontekst może szybko wzrosnąć. Może to spowodować problemy z wydajnością.
- Kontekst nie jest bezpieczny dla wątków, dlatego nie powinien być współużytkowany w wielu wątkach wykonujących na nim pracę jednocześnie.
- Jeśli wyjątek powoduje, że kontekst jest w stanie nieodwracalnym, cała aplikacja może zakończyć działanie.
- Prawdopodobieństwo wystąpienia problemów związanych ze współbieżnością zwiększa się wraz ze wzrostem odstępu między czasem wykonywania zapytań dotyczących danych i aktualizowania.
Connections
Domyślnie kontekst zarządza połączeniami z bazą danych. Kontekst otwiera i zamyka połączenia zgodnie z potrzebami. Na przykład kontekst otwiera połączenie w celu wykonania zapytania, a następnie zamyka połączenie po przetworzeniu wszystkich zestawów wyników.
Istnieją przypadki, gdy chcesz mieć większą kontrolę nad otwarciem i zamknięciem połączenia. Na przykład podczas pracy z programem SQL Server Compact zaleca się utrzymywanie oddzielnego otwartego połączenia z bazą danych przez cały okres istnienia aplikacji w celu zwiększenia wydajności. Ten proces można zarządzać ręcznie przy użyciu Connection właściwości .