2013-09-05 9 views
11

Was ist der Unterschied zwischen einem "Modell" und einem "Kontext" im Entity Framework-Jargon?Was ist der Unterschied zwischen einem "Modell" und einem "Kontext" im Entity Framework-Jargon?

Ich verwende den ersten Ansatz der Entity Framework-Datenbank in einer Anwendung. Diese Begriffe sind viele Male aufgetaucht, da ich verschiedene Foren und Artikel über EF-Implementierungsstrategien gelesen habe. Ich kann mir nicht vorstellen, wie unterschiedlich diese beiden sind (nicht einmal mit dem Entity Framework, sondern mit der Softwareentwicklung im Allgemeinen). Leute benutzen die Wörter, als ob sie unterschiedlich sind, aber dann scheinen einige Leute die Wörter austauschbar zu benutzen.

+0

Die Klasse 'DbContext' ist die Basisklasse, die Datenbankabfragen ermöglicht, die in EF verwendet werden.Das Modell im MVC-Sinne kann sich auf die allgemeine Domäne beziehen, die Entitäten (auch Modelle genannt) und Datenbankverbindungen enthält oder sich auf ein Modell bezieht, in dem sie im Grunde eine Klasse bedeuten, die zur Darstellung Ihrer Daten verwendet wird (z. B. "Person")). –

Antwort

8

Kontext

Das ist einfach. Der Kontext ist entweder die DbContext oder die ältere ObjectContext Klasse, die den Kern der Entitätsframework-Datenzugriffsebene darstellt. Es bietet transparenten Datenbankzugriff über stark typisierte Entitätsgruppen, verfolgt und speichert Änderungen, verwaltet Datenbanktransaktionen und Verbindungen und enthält eine Reihe von Hilfsmethoden, um alle Arten von Datenzugriffsaufgaben zu erleichtern (va DbContext).

Modell

Dies kann zwei (oder drei) Dinge sein.

  • Das Datenmodell oder Speichermodell. Welches ist das relationale Modell der Datenbank, die der EF-Datenzugriffsebene zugrunde liegt?
  • Das konzeptionelle Modell oder Klassenmodell. Welches ist das .NET-Klassenmodell, das die Datenbank darstellt? Dieses Modell kann entweder durch EF (Datenbank zuerst) oder durch ein vorhandenes Klassenmodell (Code zuerst) generiert werden. Das konzeptionelle Modell und das Geschäftsmodell sind über die -Zuordnung verknüpft, sodass EF weiß, wie .NET-Klassen aus Datenbankdatensätzen bevölkert werden und umgekehrt .NET-Klassen in der Datenbank gespeichert werden.
  • Einige Leute bezeichnen die Klassen im konzeptionellen Modell als "Modelle". Das ist nicht falsch, aber ich bevorzuge dafür den Namen entities.

So Kontext und Modell sind zwei ganz verschiedene Dinge. Man könnte sagen, dass der Kontext der Vermittler zwischen zwei verschiedenen Typen von Modellen ist.

+0

Betrachtet man den Aufzählungspunkt 2 aus Ihrer Antwort, was wäre der Grund, warum jemand jemals mehr dbContexte als Modelle und umgekehrt haben würde? Gibt es eine Best Practice, wenn es um die Anzahl der Modelle (Edmx) für die Anzahl der verwendeten Kontexte geht? – user1431072

+1

@ user1431072 Es kann Gründe geben, separate Kontexte zu haben, die jeweils unterschiedliche Teile der Datenbank repräsentieren. Wenn beispielsweise separate Tabellen für die Autorisierung vorhanden sind, könnten Sie einen Autorisierungskontext (mit zugehörigem Autorisierungsklassenmodell) und einen Geschäftskontext haben. Mehr (Speicher-) Modelle als Kontext ist nicht möglich: Ein Kontext greift auf eine Datenbank zu. –

+0

@GertArnold: +1. Was sind Ihre Überlegungen zu folgenden Themen: Wenn ich die Vorlage "ADO.NET-Entitätsdatenmodell" zum Generieren von Code First-Klassen aus einer vorhandenen Datenbank verwende, schlägt Visual Studio zunächst den Objektnamen "Model1" vor. Ich ändere das zu 'FooModel'. VS generiert dann eine 'Klasse FooModel: DbContext'. Für mich ist diese Vererbungsbeziehung, wo viel von der Verwirrung über "Modell" vs. "Kontext" herrührt. Wenn VS etwas erzeugt, das 'FooModel' genannt wird, sollte es nicht eher ein Namespace oder ein Unterordner sein? Sollte die Kontextklasse für das 'Foo'-Modell nicht' FooContext' genannt werden? – stakx

3

Grob gesagt ein Zusammenhang mit einer Datenbank-Verbindung oder Sitzung bezieht wobeia das Modell die Zuordnung zwischen Tabellen, Views ist usw Datenzugriff Objektklassen (dh Objekte, die die Daten enthalten)

0

Ein Modell ist ein Klasse, die normalerweise eine Datenbanktabelle oder -struktur zum Anzeigen einer Datenbanktabelle darstellt. Zum Beispiel, wenn ich eine Datenbank für Autos habe, dann könnte ein Modell für Auto

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

seine Dieses Modell von Entity Framework und den SQL-Provider (für MySQL oder MSSQL in der Regel) verwendet wird, eine Abfrage für eine Datenbank zu schreiben . Die Abfrage erfordert einen Weg, dies zu kartieren, und das ist die Aufgabe des Kontextes. Der Kontext erstreckt sich normalerweise DbContext und wird für die Fassade des Zugriffs auf die Datenbanktabelle als ein im Speicherobjekt verwendet.

public class CarContext : DbContext 
{ 
DbSet<Car> Cars { get; set; } 
} 
Verwandte Themen