2013-09-05 11 views
11

Jaka jest różnica między "modelem" a "kontekstem" w żargonie Entity Framework?Jaka jest różnica między "Modelem" a "Kontekstem" w żargonie Entity Framework?

Używam pierwszego podejścia bazy danych Entity Framework w aplikacji. Te terminy pojawiały się wiele razy, ponieważ czytałem różne fora i artykuły na temat strategii wdrażania EF. Nie mogę się domyślić, jak te dwie rzeczy różnią się od siebie (nawet w przypadku struktury opartej wyłącznie na jednostkach, ale ogólnie na rozwoju oprogramowania). Ludzie używają słów tak, jakby były różne, ale niektórzy ludzie wydają się używać tych słów zamiennie.

+0

Klasa 'DbContext' jest klasą bazową, która pozwala na kwerendę do bazy danych używaną w EF.Model w rozumieniu MVC może odnosić się do domeny ogólnej, która zawiera jednostki (również nazwane modele) i połączenia z bazą danych, lub może odnosić się do modelu, w którym w zasadzie oznaczają klasę używaną do reprezentowania danych (na przykład "Osoba").). –

Odpowiedz

8

Kontekst

To jest łatwe. Kontekstem jest albo DbContext lub starsza klasa ObjectContext, która jest rdzeniem warstwy dostępu do danych struktury szkieletu. Zapewnia przejrzysty dostęp do bazy danych dzięki silnym typograficznym zestawom encji, śledzi i zapisuje zmiany, zarządza transakcjami i połączeniami z bazami danych oraz zawiera szereg narzędzi użytkowych ułatwiających wszelkiego rodzaju zadania dostępu do danych (szczególnie DbContext).

model

to mogą być dwie (lub trzy) rzeczy.

  • Model danych lub model sklepu. Który jest relacyjnym modelem bazy danych leżącej u podstaw warstwy dostępu do danych EF.
  • Model koncepcyjny lub model klasy. Który jest modelem klasy .Net, który reprezentuje bazę danych. Ten model może zostać wygenerowany przez EF (najpierw bazy danych) lub może to być istniejący model klasy (najpierw kod). Model koncepcyjny i model sklepu są połączone poprzez mapowanie , więc EF wie, jak zapełniać klasy .Net z rekordów bazy danych i odwrotnie, jak zapisywać klasy .Net do bazy danych.
  • Niektóre osoby odnoszą się do klas w modelu koncepcyjnym jako "modele". Nie jest to złe, ale wolę używać nazwy entities.

Więc kontekst i modelu są dwie zupełnie różne rzeczy. Można powiedzieć, że kontekst jest pośrednikiem między dwoma różnymi typami modeli.

+0

Biorąc pod uwagę punkt 2 z Twojej odpowiedzi, jaki byłby powód, dla którego ktoś miałby mieć więcej dbContextów niż modeli i na odwrót? Czy istnieje najlepsza praktyka, jeśli chodzi o liczbę modeli (edmx) do liczby użytych kontekstów? – user1431072

+1

@ user1431072 Mogą istnieć powody, aby mieć oddzielne konteksty, z których każdy reprezentuje różne części bazy danych. Na przykład, jeśli istnieją oddzielne tabele do autoryzacji, możesz mieć kontekst autoryzacji (z dołączonym modelem klasy autoryzacji) i kontekst biznesowy. Więcej modeli (sklepów) niż kontekst nie jest możliwe: kontekst uzyskuje dostęp do jednej bazy danych. –

+0

@GertArnold: +1. Jakie są Twoje przemyślenia na temat: Kiedy używam szablonu "Szablon danych obiektu encji ADO.NET" do generowania klas Code First z istniejącej bazy danych, Visual Studio początkowo zasugeruje nazwę elementu 'Model1'. Zmieniam to na "FooModel". VS następnie wygeneruje 'class FooModel: DbContext'. Dla mnie ten związek z dziedziczeniem jest źródłem wielu zamieszania wokół "modelu" kontra "kontekstu". Jeśli VS generuje w ogóle coś zwane 'FooModel', czy nie powinien to być raczej obszar nazw lub podfolder? Czy nie powinna być nazywana klasa kontekstu dla modelu 'Foo'' FooContext'? – stakx

3

Luźno mówiąc kontekst odnosi się do połączenia z bazą danych lub sesji wherea model jest mapowanie między tabelami, widokami, etc dostęp do danych klas obiektów (czyli obiektów, które zawierają dane)

0

model jest klasa, która zwykle reprezentuje tabelę lub strukturę bazy danych do wyświetlania tabeli bazy danych. Na przykład, gdybym miał bazę danych dla samochodów, a następnie model samochodu może być

public class Car 
{ 
[Key] 
public int CarId { get; set; } 
public string Make { get; set; } 
public string Model { get; set; } 
public int Year { get; set; } 
} 

Model ten jest wykorzystywany przez Entity Framework i SQL (MySQL lub MSSQL zazwyczaj), aby utworzyć kwerendy w bazie danych . Zapytanie wymaga sposobu na odwzorowanie tego, co jest zadaniem kontekstu. Kontekst zwykle rozciąga się na DbContext i jest używany do uzyskania elewacji dostępu do tabeli bazy danych jako obiektu pamięci.

public class CarContext : DbContext 
{ 
DbSet<Car> Cars { get; set; } 
} 
Powiązane problemy