Praca z klasą DbContext

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#) lub For Each (Visual Basic).
  • Jest on wyliczany przez operację kolekcji, taką jak ToArray, ToDictionarylub ToList.
  • Operatory LINQ, takie jak First lub Any , są określone w najbardziej zewnętrznej części zapytania.
  • Jedna z następujących metod jest wywoływana: Load metoda rozszerzenia, DbEntityEntry.Reload, Database.ExecuteSqlCommandi DbSet<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 .