Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Entity Framework ist eine Reihe von Technologien in ADO.NET, die die Entwicklung von datenorientierten Softwareanwendungen unterstützen. Architekten und Entwickler von datenorientierten Anwendungen haben mit der Notwendigkeit zu kämpfen, zwei sehr unterschiedliche Ziele zu erreichen. Sie müssen die Entitäten, Beziehungen und Logik der zu lösenden Geschäftsprobleme modellieren, und sie müssen auch mit den Datenmodulen arbeiten, die zum Speichern und Abrufen der Daten verwendet werden. Die Daten können mehrere Speichersysteme umfassen, die jeweils über eigene Protokolle verfügen; auch Anwendungen, die mit einem einzigen Speichersystem arbeiten, müssen die Anforderungen des Speichersystems mit den Anforderungen des Schreibens von effizientem und wartungsfähigem Anwendungscode in Einklang bringen.
Das Entity Framework ermöglicht Entwicklern das Arbeiten mit Daten in Form von domänenspezifischen Objekten und Eigenschaften, z. B. Kunden- und Kundenadressen, ohne sich mit den zugrunde liegenden Datenbanktabellen und Spalten befassen zu müssen, in denen diese Daten gespeichert sind. Mit Entity Framework können Entwickler bei der Behandlung von Daten auf einer höheren Abstraktionsebene arbeiten und datenorientierte Anwendungen mit weniger Code erstellen und verwalten als in herkömmlichen Anwendungen. Da Entity Framework eine Komponente von .NET Framework ist, können Entity Framework-Anwendungen auf jedem Computer ausgeführt werden, auf dem .NET Framework ab Version 3.5 SP1 installiert ist.
Modelle leben
Ein langjähriger und allgemeiner Entwurfsansatz beim Erstellen einer Anwendung oder eines Diensts ist die Aufteilung der Anwendung oder des Diensts in drei Teile: ein Domänenmodell, ein logisches Modell und ein physisches Modell. Das Domänenmodell definiert die Entitäten und Beziehungen im System, das modelliert wird. Das logische Modell für eine relationale Datenbank normalisiert die Entitäten und Beziehungen in Tabellen mit Fremdschlüsseleinschränkungen. Das physische Modell befasst sich mit den Funktionen eines bestimmten Datenmoduls, indem Speicherdetails wie Partitionierung und Indizierung angegeben werden.
Das physische Modell wird von Datenbankadministratoren optimiert, um die Leistung zu verbessern, aber Programmierer, die Anwendungscode schreiben, beschränken sich hauptsächlich auf das Arbeiten mit dem logischen Modell, indem SQL-Abfragen und gespeicherte Prozeduren geschrieben werden. Domänenmodelle werden in der Regel als Tool zum Erfassen und Kommunizieren der Anforderungen einer Anwendung verwendet, häufig als inerte Diagramme, die in den frühen Phasen eines Projekts angezeigt und diskutiert und dann abgebrochen werden. Viele Entwicklungsteams überspringen das Erstellen eines konzeptionellen Modells und beginnen mit der Angabe von Tabellen, Spalten und Schlüsseln in einer relationalen Datenbank.
Das Entity Framework bietet Modellen Leben, indem Entwickler Entitäten und Beziehungen im Domänenmodell abfragen können (als konzeptuelles Modell im Entity Framework bezeichnet), während sie sich auf das Entity Framework verlassen, um diese Vorgänge in datenquellenspezifische Befehle zu übersetzen. Dadurch werden Anwendungen von hartcodierten Abhängigkeiten von einer bestimmten Datenquelle freigegeben.
Beim Arbeiten mit Code First wird das konzeptionelle Modell dem Speichermodell im Code zugeordnet. Das Entity Framework kann das konzeptionelle Modell basierend auf den Objekttypen und zusätzlichen Konfigurationen, die Sie definieren, ableiten. Die Zuordnungsmetadaten werden während der Laufzeit basierend auf einer Kombination aus der Definition Ihrer Domänentypen und zusätzlichen Konfigurationsinformationen generiert, die Sie im Code bereitstellen. Entity Framework generiert die Datenbank nach Bedarf basierend auf den Metadaten. Weitere Informationen finden Sie unter Erstellen eines Modells.
Beim Arbeiten mit den Entitätsdatenmodelltools werden das konzeptionelle Modell, das Speichermodell und die Zuordnungen zwischen den beiden in XML-basierten Schemas ausgedrückt und in Dateien mit entsprechenden Namenserweiterungen definiert:
Konzeptionelle Schemadefinitionssprache (Conceptual Schema Definition Language, CSDL) definiert das konzeptionelle Modell. CSDL ist die Implementierung des Entity Frameworks für das Entity Data Model. Die Dateierweiterung ist CSDL.
Die Speicherschemadefinitionssprache (SSDL) definiert das Speichermodell, das auch als logisches Modell bezeichnet wird. Die Dateierweiterung ist SSDL.
Die Zuordnungsspezifikationssprache (Mapping Specification Language, MSL) definiert die Zuordnungen zwischen speicher- und konzeptionellen Modellen. Die Dateierweiterung ist MSL.
Das Speichermodell und die Zuordnungen können sich nach Bedarf ändern, ohne dass Änderungen am konzeptionellen Modell, datenklassen oder Anwendungscode erforderlich sind. Da Speichermodelle anbieterspezifisch sind, können Sie mit einem konsistenten konzeptuellen Modell in verschiedenen Datenquellen arbeiten.
Das Entity Framework verwendet dieses Modell und zuordnen Dateien zum Erstellen, Lesen, Aktualisieren und Löschen von Vorgängen für Entitäten und Beziehungen im konzeptionellen Modell zu entsprechenden Vorgängen in der Datenquelle. Das Entity Framework unterstützt sogar die Zuordnung von Entitäten im konzeptionellen Modell zu gespeicherten Prozeduren in der Datenquelle. Weitere Informationen finden Sie unter CSDL-, SSDL- und MSL-Spezifikationen.
Zuordnen von Objekten zu Daten
Objektorientierte Programmierung stellt eine Herausforderung für die Interaktion mit Datenspeichersystemen dar. Obwohl die Organisation von Klassen häufig die Organisation relationaler Datenbanktabellen widerspiegelt, ist die Anpassung nicht perfekt. Mehrere normalisierte Tabellen entsprechen häufig einer einzelnen Klasse, und Beziehungen zwischen Klassen werden häufig anders dargestellt als Beziehungen zwischen Tabellen. Um beispielsweise den Kunden für einen Verkaufsauftrag darzustellen, kann eine Order
Klasse eine Eigenschaft verwenden, die einen Verweis auf eine Instanz einer Customer
Klasse enthält, während eine Order
Tabellenzeile in einer Datenbank eine Fremdschlüsselspalte (oder eine Gruppe von Spalten) mit einem Wert enthält, der einem Primärschlüsselwert in der Customer
Tabelle entspricht. Eine Customer
Klasse hat möglicherweise eine Eigenschaft namens Orders
, die eine Auflistung von Instanzen der Order
Klasse enthält, während die Customer
Tabelle in einer Datenbank keine vergleichbare Spalte aufweist. Das Entity Framework bietet Entwicklern die Flexibilität, Beziehungen auf diese Weise darzustellen, oder um Beziehungen genauer zu modellieren, wie sie in der Datenbank dargestellt werden.
Vorhandene Lösungen haben versucht, diese Lücke zu überbrücken, die häufig als "Impedanzkonflikt" bezeichnet wird, indem nur objektorientierte Klassen und Eigenschaften relationalen Tabellen und Spalten zugeordnet werden. Anstatt diesen herkömmlichen Ansatz zu verwenden, ordnet das Entity Framework relationale Tabellen, Spalten und Fremdschlüsseleinschränkungen in logischen Modellen Entitäten und Beziehungen in konzeptionellen Modellen zu. Dies ermöglicht sowohl beim Definieren von Objekten als auch beim Optimieren des logischen Modells mehr Flexibilität. Die Entitätsdatenmodelltools generieren erweiterbare Datenklassen basierend auf dem konzeptionellen Modell. Diese Klassen sind Teilklassen, die mit zusätzlichen Membern erweitert werden können, die der Entwickler hinzufügt. Standardmäßig werden die Klassen, die für ein bestimmtes konzeptionelles Modell generiert werden, von Basisklassen abgeleitet, die Dienste zum Materialisieren von Entitäten als Objekte und zum Nachverfolgen und Speichern von Änderungen bereitstellen. Entwickler können diese Klassen verwenden, um mit den Entitäten und Beziehungen als Objekte im Zusammenhang mit Zuordnungen zu arbeiten. Entwickler können auch die Klassen anpassen, die für ein konzeptionelles Modell generiert werden. Weitere Informationen finden Sie unter Arbeiten mit Objekten.
Zugreifen auf und Ändern von Entitätsdaten
Mehr als nur eine andere objektrelationale Zuordnungslösung geht es im Wesentlichen darum, Anwendungen den Zugriff auf Daten zu ermöglichen, die als Entitäten und Beziehungen im konzeptionellen Modell dargestellt werden. Das Entity Framework verwendet Informationen im Modell und Zuordnungsdateien, um Objektabfragen anhand von Entitätstypen zu übersetzen, die im konzeptionellen Modell dargestellt werden, in datenquellenspezifische Abfragen. Abfrageergebnisse werden in Objekten materialisiert, die vom Entity Framework verwaltet werden. Das Entity Framework bietet die folgenden Möglichkeiten, ein konzeptionelles Modell abzufragen und Objekte zurückzugeben:
LINQ to Entities. Stellt Language-Integrated Abfrageunterstützung (LINQ) für Abfragen von Entitätstypen bereit, die in einem konzeptionellen Modell definiert sind. Weitere Informationen finden Sie unter LINQ to Entities.
Entität SQL. Ein speicherunabhängiger Dialekt von SQL, der direkt mit Entitäten im konzeptionellen Modell arbeitet und Entitätendatenmodellkonzepte unterstützt. Entitäts-SQL wird sowohl für Objektabfragen als auch für Abfragen verwendet, die mithilfe des EntityClient-Anbieters ausgeführt werden. Weitere Informationen finden Sie unter Entity SQL Overview.
Das Entity Framework enthält den EntityClient-Datenanbieter. Dieser Anbieter verwaltet Verbindungen, übersetzt Entitätsabfragen in datenquellenspezifische Abfragen und gibt einen Datenleser zurück, den das Entity Framework verwendet, um Entitätsdaten in Objekte zu materialisieren. Wenn die Objektmaterialisierung nicht erforderlich ist, kann der EntityClient-Anbieter auch wie ein Standard-ADO.NET Datenanbieter verwendet werden, indem Anwendungen die Ausführung von Entity SQL-Abfragen ermöglichen und den zurückgegebenen schreibgeschützten Datenleser nutzen können. Weitere Informationen finden Sie unter EntityClient-Anbieter für das Entity Framework.
Das folgende Diagramm veranschaulicht die Entity Framework-Architektur für den Zugriff auf Daten:
Die Entitätsdatenmodelltools können eine von der Entität abgeleitete System.Data.Objects.ObjectContext
Klasse generieren oder System.Data.Entity.DbContext
die den Entitätscontainer im konzeptionellen Modell darstellt. Dieser Objektkontext bietet die Möglichkeiten zum Nachverfolgen von Änderungen und Verwalten von Identitäten, Parallelität und Beziehungen. Diese Klasse macht auch eine SaveChanges
Methode verfügbar, die Einfügungen, Aktualisierungen und Löschvorgänge in die Datenquelle schreibt. Wie Abfragen werden diese Änderungen entweder von Befehlen vorgenommen, die automatisch vom System oder von gespeicherten Prozeduren generiert werden, die vom Entwickler angegeben werden.
Datenanbieter
Der EntityClient
Anbieter erweitert das ADO.NET Anbietermodell durch den Zugriff auf Daten in Bezug auf konzeptionelle Entitäten und Beziehungen. Es führt Abfragen aus, die Entity SQL verwenden. Entity SQL stellt die zugrunde liegende Abfragesprache bereit, die die Kommunikation mit der Datenbank ermöglicht EntityClient
. Weitere Informationen finden Sie unter EntityClient-Anbieter für das Entity Framework.
Das Entity Framework enthält einen aktualisierten SqlClient-Datenanbieter, der kanonische Befehlsstrukturen unterstützt. Weitere Informationen finden Sie unter SqlClient für das Entity Framework.
Tools für Entitätsdatenmodell
Zusammen mit der Entity Framework-Laufzeit umfasst Visual Studio die Zuordnungs- und Modellierungstools. Weitere Informationen finden Sie unter Modellierung und Zuordnung.
Erfahren Sie mehr
Weitere Informationen zum Entity Framework finden Sie unter:
Erste Schritte – Enthält Informationen dazu, wie Sie mithilfe der Schnellstartanleitung schnell loslegen können. Hier erfahren Sie, wie Sie eine einfache Entity Framework-Anwendung erstellen.
Entity Framework-Terminologie – Definiert viele der Begriffe, die durch das Entity Data Model und das Entity Framework eingeführt werden und in der Entity Framework-Dokumentation verwendet werden.
Entity Framework-Ressourcen – Stellt Links zu konzeptionellen Themen und Links zu externen Themen und Ressourcen zum Erstellen von Entity Framework-Anwendungen bereit.