Entity Framework Übersicht

Das Entity Framework ist eine Reihe von Technologien in ADO.NET, die die Entwicklung von datenorientierten Softwareanwendungen unterstützen. Architekten und Entwickler datenorientierter Anwendungen mussten zwei sehr verschiedene Ziele erreichen. Sie mussten die Entitäten, die Beziehungen und die Logik der zu lösenden Geschäftsprobleme modellieren und mit den zum Speichern und Abrufen von Daten verwendeten Daten-Engines arbeiten. Die Daten können auf mehrere Speichersysteme verteilt sein, die jeweils über eigene Protokolle verfügen. Selbst Anwendungen, die mit nur einem Speichersystem arbeiten, müssen ein ausgewogenes Verhältnis zwischen den Anforderungen des Speichersystems und den Anforderungen beim Schreiben von effizientem und verwaltbarem Anwendungscode finden.

Mit Entity Framework können Entwickler mit Daten in Form von domänenspezifischen Objekten und Eigenschaften wie Kunden und Kundenadressen arbeiten, ohne sich um die zugrunde liegenden Datenbanktabellen und -spalten zu sorgen, in denen diese Daten gespeichert werden. Mit Entity Framework können Entwickler beim Umgang mit Daten auf einer höheren Abstraktionsebene arbeiten und datenorientierte Anwendungen mit weniger Code als in herkömmlichen Anwendungen erstellen und verwalten. Da Entity Framework komponente des .NET Framework ist, können Entity Framework-Anwendungen auf jedem Computer ausgeführt werden, auf dem die .NET Framework ab Version 3.5 SP1 installiert ist.

Geben Sie Modellen Leben

Ein seit langem befolgter und verbreiteter Entwurfsansatz beim Erstellen einer Anwendung oder eines Dienstes besteht darin, die Anwendung oder den Dienst in drei Teile aufzuspalten: in ein Domänenmodell, ein logisches Modell und ein physisches Modell. Das Domänenmodell definiert die Entitäten und Beziehungen in dem zu modellierenden System. Das logische Modell für eine relationale Datenbank normalisiert die Entitäten und Beziehungen in Tabellen mit Fremdschlüsseleinschränkungen. Das physische Modell bezieht sich auf die Funktionen einer bestimmten Daten-Engine und gibt die Speicherdetails, wie z.B. Partitionierung und Indizierung, an.

Das physische Modell wird zur Steigerung der Leistung von Datenbankadministratoren verfeinert, während sich Programmierer, die Anwendungscode schreiben, in erster Linie auf die Arbeit mit dem logischen Modell beschränken, indem sie SQL-Abfragen schreiben und gespeicherte Prozeduren aufrufen. Domänenmodelle werden im Allgemeinen als Werkzeuge zum Erfassen und Kommunizieren der Anwendungsanforderungen, häufig als statische Diagramme, verwendet, die in einer frühen Projektphase betrachtet und diskutiert und dann abgelegt werden. Viele Entwicklungsteams lassen das Erstellen eines konzeptionellen Modells aus und beginnen, indem sie Tabellen, Spalten und Schlüssel in einer relationalen Datenbank festlegen.

Die Entity Framework ermöglicht Es Entwicklern, Entitäten und Beziehungen im Domänenmodell (im Entity Framework als konzeptionelles Modell bezeichnet) abfragen zu können, während sie sich auf die Entity Framework verlassen, um diese Vorgänge in datenquellenspezifische Befehle zu übersetzen. Dadurch werden Anwendungen von hartcodierten Abhängigkeiten einer bestimmten Datenquelle befreit.

Bei Verwendung von Code First wird das konzeptionelle Modell dem Speichermodell im Code zugeordnet. Die Entity Framework kann das konzeptionelle Modell basierend auf den objekttypen und zusätzlichen Konfigurationen, die Sie definieren, abgeleitet werden. Die Zuordnungsmetadaten werden während der Laufzeit generiert und basieren auf einer Kombination daraus, wie Sie die Domänentypen definiert haben, sowie auf zusätzlichen Konfigurationsinformationen, die Sie im Code bereitstellen. Entity Framework generiert die Datenbank nach Bedarf basierend auf den Metadaten. Weitere Informationen finden Sie unter Erstellen eines Modells.

Bei der Arbeit mit den Entity Data Model-Tools werden das konzeptionelle Modell, das Speichermodell und die Zuordnungen zwischen beiden in XML-basierten Schemas ausgedrückt und in Dateien mit entsprechenden Namenserweiterungen definiert:

  • Die konzeptionelle Schemadefinitionssprache (Conceptual Schema Definition Language, CSDL) definiert das konzeptionelle Modell. CSDL ist die Entity Framework implementierung des Entity Data Model. Die Dateierweiterung ist CSDL.

  • Die Datenspeicherschema-Definitionssprache (Store Schema Definition Language, SSDL) definiert das Speichermodell, das auch als logisches Modell bezeichnet wird. Die Dateierweiterung ist SSDL.

  • Die Mapping-Spezifikationssprache (Mapping Specification Language, MSL) definiert die Zuordnungen zwischen Speichermodell und konzeptionellem Modell. Die Dateierweiterung ist MSL.

Das Speichermodell und die Zuordnungen können sich bei Bedarf ändern, ohne dass Änderungen am konzeptionellen Modell, den Datenklassen oder dem Anwendungscode erforderlich werden. Da Speichermodelle anbieterspezifisch sind, können Sie mit einem konsistenten konzeptionellen Modell bei verschiedenen Datenquellen arbeiten.

Der Entity Framework verwendet diese Modell- und Zuordnungsdateien, um Vorgänge für Entitäten und Beziehungen im konzeptionellen Modell zu entsprechenden Vorgängen in der Datenquelle zu erstellen, zu lesen, zu aktualisieren und zu löschen. Die Entity Framework unterstützt sogar das Zuordnen 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

Die objektorientierte Programmierung stellt eine Herausforderung für die Interaktion mit Datenspeichersystemen dar. Obwohl die Organisation der Klassen häufig den Aufbau relationaler Datenbanktabellen sehr genau widerspiegelt, passen diese Strukturen nicht perfekt zusammen. Häufig entsprechen mehrere normalisierte Tabellen einer einzigen Klasse, und Beziehungen zwischen Klassen werden oft anders dargestellt als Beziehungen zwischen Tabellen. Um beispielsweise den Kunden für einen Auftrag darzustellen, verwendet die Order-Klasse möglicherweise eine Eigenschaft, die einen Verweis auf eine Instanz einer Customer-Klasse enthält, während eine Zeile in der Order-Tabelle in einer Datenbank jedoch eine Fremdschlüsselspalte (oder mehrere Spalten als Fremdschlüssel) mit einem Wert enthält, der einem Primärschlüsselwert in der Customer-Tabelle entspricht. Eine Customer-Klasse kann über eine Eigenschaft mit dem Namen Orders verfügen, die eine Auflistung von Instanzen der Order-Klasse enthält, während die Customer-Tabelle in einer Datenbank nicht über eine vergleichbare Spalte verfügt. Die Entity Framework bietet Entwicklern die Flexibilität, Beziehungen auf diese Weise zu darstellen oder Beziehungen genauer zu modellieren, wie sie in der Datenbank dargestellt werden.

Vorhandene Lösungen haben versucht, diese Lücke, oft als "Impedance Mismatch" bezeichnet, zu füllen, indem nur objektorientierte Klassen und Eigenschaften relationalen Tabellen und Spalten zugeordnet wurden. Anstatt diesen herkömmlichen Ansatz zu verwenden, ordnet die Entity Framework relationale Tabellen, Spalten und Fremdschlüsseleinschränkungen in logischen Modellen Entitäten und Beziehungen in konzeptionellen Modellen zu. Dadurch wird sowohl die Definition von Objekten als auch die Optimierung des logischen Modells viel flexibler. Die Entity Data Model generieren erweiterbare Datenklassen basierend auf dem konzeptionellen Modell. Diese Klassen sind partielle Klassen, die mit zusätzlichen, vom Entwickler hinzuzufügenden Membern erweitert werden können. Die für ein bestimmtes konzeptionelles Modell erzeugten Klassen werden standardmäßig von Basisklassen abgeleitet, die Dienste zur Umsetzung von Entitäten in Objekte und zum Nachverfolgen und Speichern von Änderungen zur Verfügung stellen. Entwickler können diese Klassen verwenden, um die Entitäten und Beziehungen als Objekte zu behandeln, die durch Zuordnungen verknüpft sind. Entwickler können die für ein konzeptionelles Modell generierten Klassen auch anpassen. Weitere Informationen finden Sie unter Arbeiten mit Objekten.

Zugreifen auf und Ändern von Entitätsdaten

Entity Framework ist mehr als nur eine weitere objektrelationale Mappinglösung. Es dient im Wesentlichen dazu, Anwendungen den Zugriff auf und die Änderung von Daten zu ermöglichen, die als Entitäten und Beziehungen im konzeptionellen Modell dargestellt werden. Die Entity Framework verwendet Informationen in den Modell- und Zuordnungsdateien, um Objektabfragen für Entitätstypen, die im konzeptionellen Modell dargestellt werden, in datenquellenspezifische Abfragen zu übersetzen. Abfrageergebnisse werden in Objekte materialisiert, die Entity Framework werden. Das Entity Framework bietet die folgenden Möglichkeiten zum Abfragen eines konzeptionellen Modells und Zurückgeben von Objekten:

  • LINQ to Entities. Bietet Language Integrated Query (LINQ)-Unterstützung zum Abfragen von Entitätstypen, die in einem konzeptionellen Modell definiert sind. Weitere Informationen finden Sie unter LINQ to Entities.

  • Entitäts SQL. Ein speicherunabhängiger Dialekt von SQL, der direkt mit Entitäten im konzeptionellen Modell arbeitet und Entity Data Model unterstützt. Entity SQL wird sowohl mit Objektabfragen als auch mit Abfragen verwendet, die mithilfe des EntityClient-Anbieters ausgeführt werden. Weitere Informationen finden Sie unter Entity SQL Overview.

Die Entity Framework enthält den EntityClient-Datenanbieter. Dieser Anbieter verwaltet Verbindungen, übersetzt Entitätsabfragen in datenquellenspezifische Abfragen und gibt einen Datenleser zurück, den der Entity Framework verwendet, um Entitätsdaten in Objekte zu materialisieren. Wenn keine Objektmaterialisierung erforderlich ist, kann der EntityClient-Anbieter auch wie ein standarder ADO.NET-Datenanbieter verwendet werden, indem Anwendungen die Ausführung von Entity SQL-Abfragen und die Verwendung des zurückgegebenen schreibgeschützten Datenlesers ermöglichen. Weitere Informationen finden Sie unter EntityClient-Anbieter für das Entity Framework.

Das folgende Diagramm illustriert die Entity Framework-Architektur für den Datenzugriff:

Entity Framework-Architekturdiagramm

Die Entity Data Model Tools können eine Klasse generieren, die von abgeleitet ist oder System.Data.Objects.ObjectContext System.Data.Entity.DbContext den Entitätscontainer im konzeptionellen Modell darstellt. Dieser Objektkontext stellt die Funktionen zum Nachverfolgen von Änderungen und zum Verwalten von Identitäten, Parallelität und Beziehungen bereit. Diese Klasse macht auch eine SaveChanges-Methode verfügbar, die Einfügungen, Aktualisierungen und Löschungen in die Datenquelle schreibt. Diese Änderungen werden wie bei Abfragen entweder durch automatisch vom System generierte Befehle oder durch vom Entwickler angegebene gespeicherte Prozeduren vorgenommen.

Datenanbieter

Der Anbieter erweitert das ADO.NET Anbietermodell durch den Zugriff auf Daten in Bezug auf konzeptionelle EntityClient Entitäten und Beziehungen. Er führt Abfragen aus, die Entity SQL. Entity SQL stellt die zugrunde liegende Abfragesprache zur Verfügung, die die EntityClient Kommunikation mit der Datenbank ermöglicht. Weitere Informationen finden Sie unter EntityClient-Anbieter für das Entity Framework.

Die Entity Framework enthält eine aktualisierte SqlClient-Datenanbieter, die kanonische Befehlsstrukturen unterstützt. Weitere Informationen finden Sie unter SqlClient für Entity Framework.

Entity Data Model-Tools

Zusammen mit der Entity Framework Runtime umfasst Visual Studio die Zuordnungs- und Modellierungstools. Weitere Informationen finden Sie unter Modellierung und Zuordnungvon .

Weitere Informationen

Weitere Informationen zu den Entity Framework finden Sie unter:

Erste Schritte: Enthält Informationen zum schnellen Einrichten und Ausführen mithilfe des Schnellstarts,der zeigt, wie Sie eine einfache Entity Framework erstellen.

Entity Framework Terminologie: Definiert viele der Begriffe, die von der Entity Data Model und der Entity Framework eingeführt werden und in der Entity Framework werden.

Entity Framework Ressourcen: Enthält Links zu konzeptionellen Themen und Links zu externen Themen und Ressourcen zum Erstellen Entity Framework Anwendungen.

Siehe auch