2013-04-25 14 views
8

Gdy programuję przy użyciu LINQ z plikiem .dbml, istnieje tylko jeden kontekst. Ale kiedy robię stronę MVC, wydaje mi się, że mam oddzielne konteksty dla każdej jednostki (w ten sposób samouczek MVC pokazał mi, jak to zrobić, z kontekstem "filmów").Dlaczego wiele klas DbContext?

mam:

public class AccountsContext : DbContext 
{ 
    public AccountsContext() 
     : base("DefaultConnection") 
    { 
    } 

    public DbSet<Account> Accounts { get; set; } 
} 

I mam:

public class ClientsContext : DbContext 
{ 
    public ClientsContext() 
     : base("DefaultConnection") 
    { 
    } 

    public DbSet<Client> Clients { get; set; } 
} 

Kiedy wzywam tych, muszę utworzyć oddzielne konteksty, jak:

private AccountsContext db = new AccountsContext(); 
private ClientsContext clientsContext = new ClientsContext(); 

... Co jest denerwujące i wydaje się zbędne, ponieważ wiem, że kiedy używam LINQ, muszę tylko utworzyć instancję pojedynczego obiektu bazy danych.

Czy istnieje sposób na użycie tylko jednego kontekstu i czy jest to zalecane?

Odpowiedz

12

Nic nie powinno powstrzymywać Cię przed używaniem jednego kontekstu. Baza danych i narzędzia używane do uzyskania dostępu do niej powinny być całkowicie niezależne od czegokolwiek poza nią (logika biznesowa, warstwa usług, interfejs użytkownika itp.).

Liczba kontekstów lub sposób ich używania nie powinny się zmieniać w zależności od technologii klienta.

Co z MVC prowadzi do przekonania, że ​​potrzebujesz więcej niż jednego kontekstu? A co powstrzymuje cię od tego?

Jeśli uważasz, że musisz użyć kontekstu dla każdej jednostki, ponieważ próbka była w ten sposób, nie robisz tego. Wystarczy użyć jednego kontekstu.

Jeśli to pomoże, to co proste kontekst wygląda z więcej niż jednego podmiotu:

public partial class abook_dbEntities : DbContext 
{ 
    public abook_dbEntities() 
     : base("name=abook_dbEntities") 
    { 
    } 

    public DbSet<Entity> Entities { get; set; } 
    public DbSet<Contact> Contacts { get; set; } 
} 

Jeśli to pomoże, to typowy przepływu biznesu wygląda tak:

UI -> Sterownik -> Logika biznesowa -> Dostęp do danych -> Baza danych

Twoje konteksty danych zostaną umieszczone w warstwie danych. Twoja logika przejdzie w twojej warstwie logiki biznesowej.

+5

Przykładowy film MVC specjalnie i celowo wykorzystuje więcej niż jeden kontekst. http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/adding-a-model. Dlaczego, nie wiem. Może po prostu zilustrować, że jest to możliwe. Może to być pożądane zadanie w przypadku bardzo dużych aplikacji; możesz utworzyć Kontekst dla każdego działu korporacji lub każdej fizycznej bazy danych. –

+0

Czy wiesz, czy był jakiś dobry powód? Może więc PO myśli, że tak musi być zrobione, z tego powodu? –

+0

To byłby mój domysł. –