Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
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). Do utworzenia modelu można użyć elementu DbContext skojarzonego z modelem:
- 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 Projektant EF, kontekst zostanie wygenerowany. 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 dotyczące, dodać (przy użyciu Add metod Attach ) lub usunąć (przy użyciu ) Removejednostki w kontekście za pomocą tych właściwości. Uzyskiwanie DbSet dostępu do właściwości w obiekcie kontekstu reprezentuje zapytanie początkowe zwracające wszystkie jednostki 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. - Jedna z następujących metod jest wywoływana:
Loadmetoda rozszerzenia,DbEntityEntry.Reload,Database.ExecuteSqlCommandiDbSet<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 polecenia , jeśli chcesz, aby wszystkie zasoby, które kontrolki kontekstu mają być usuwane na końcu bloku. W przypadku użycia kompilator automatycznie tworzy blok try/finally i wywołuje metodę dispose w bloku końcu.
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 użyj wystąpienia kontekstu na żądanie.
- Podczas pracy z programem Windows Presentation Foundation (WPF) lub Windows Forms użyj wystąpienia kontekstu na formularz. Dzięki temu można korzystać z funkcji śledzenia zmian dostępnych w kontekście.
- Jeśli wystąpienie kontekstu jest tworzone przez kontener 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:
- Podczas ładowania większej liczby obiektów i odwołań do pamięci zużycie pamięci może szybko wzrosnąć. Może to spowodować problemy z wydajnością.
- Kontekst nie jest bezpieczny wątkowo, dlatego nie powinien być współużytkowany w wielu wątkach wykonujących na nim pracę współbież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.
Połączenia
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 .