Übersicht über das Entity Framework

Entity Framework ist ein Satz von Technologien in ADO.NET, der die Entwicklung datenorientierter Softwareanwendungen unterstützt. 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 Datenmodulen 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.

Mithilfe von Entity Framework können Entwickler mit Daten in der Form domänenspezifischer Objekte und Eigenschaften arbeiten, wie z. B. Kunden und Kundenadressen, ohne sich über die zugrunde liegenden Datenbanktabellen und -spalten Gedanken machen zu müssen, in denen diese Daten gespeichert sind. Mit Entity Framework können Entwickler beim Umgang mit Daten auf einer höheren Abstraktionsebene arbeiten und mit weniger Code als in herkömmlichen Anwendungen datenorientierte Anwendungen erstellen und warten. 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 mit Service Pack 1 (SP1) installiert ist.

Die folgenden Abschnitte in diesem Thema enthalten weitere Einzelheiten zu Entity Framework :

  • Giving Life to Models

  • Mapping Objects to Data

  • Accessing and Changing Entity Data

  • Data Providers

  • Entity Data Model Tools

  • Learning More

Modelle für den praktischen Einsatz

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 eines bestimmten Datenmoduls 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.

Entity Framework erfüllt Modelle mit Leben, indem es Entwicklern die Möglichkeit bietet, Entitäten und Beziehungen im Domänenmodell (in Entity Framework als konzeptionelles Modell bezeichnet) abzufragen während sie sich darauf verlassen können, dass Entity Framework diese Vorgänge in datenquellenspezifische Befehle übersetzt. Dadurch werden Anwendungen von hartcodierten Abhängigkeiten einer bestimmten Datenquelle befreit. Das konzeptionelle Modell, das Speichermodell und die Zuordnungen zwischen beiden werden in XML-basierten Schemas ausgedrückt und in Dateien definiert, deren Namen entsprechende Namenserweiterungen tragen:

  • Die konzeptionelle Schemadefinitionssprache (Conceptual Schema Definition Language, CSDL) definiert das konzeptionelle Modell. CSDL ist die Implementierung des Entity Data Model in Entity Framework . 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.

Entity Framework verwendet diese Modell- und Zuordnungsdateien, um Erstell-, Lese-, Aktualisierungs- und Löschvorgänge, die auf Entitäten und Beziehungen im konzeptionellen Modell angewendet werden, in entsprechende Vorgänge in der Datenquelle umzuwandeln. 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.

Mapping 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. Entity Framework bietet Entwicklern die Flexibilität, Beziehungen entweder auf diese Weise darzustellen oder sie so zu modellieren, wie diese Beziehungen in der Datenbank dargestellt sind. Weitere Informationen finden Sie unter Definieren und Verwalten von Beziehungen (Entity Framework).

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. Statt diesen herkömmlichen Ansatz zu verfolgen, ordnet Entity Framework relationale Tabellen, Spalten und Fremdschlüsseleinschränkungen in logischen Modellen den 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 -Tools generieren erweiterbare Datenklassen auf der Grundlage des konzeptionellen Modells. 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 (Entity Framework) und How to: Customize Object-Layer Code Generation.

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. Entity Framework verwendet die Informationen in den Modell- und Zuordnungsdateien, um Objektabfragen von Entitätstypen, die im konzeptionellen Modell dargestellt werden, in datenquellenspezifische Abfragen zu übersetzen. Abfrageergebnisse werden in Objekte umgesetzt, die von Entity Framework verwaltet werden. Entity Framework bietet die folgenden Möglichkeiten, ein konzeptionelles Modell abzufragen und Objekte zurückzugeben:

  • 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.

  • Entity SQL . Ein speicherunabhängiger SQL-Dialekt, der direkt mit Entitäten im konzeptionellen Modell arbeitet und Entity Data Model -Konzepte unterstützt. Entity SQL wird sowohl für Objektabfragen als auch für Abfragen verwendet, die mit dem EntityClient-Anbieter ausgeführt werden. Weitere Informationen finden Sie unter Übersicht über Entity SQL.

  • Abfrage-Generator-Methoden Diese Methoden ermöglichen das Erstellen von Entity SQL -Abfragen unter Verwendung von Abfragemethoden im Stil von LINQ. Weitere Informationen finden Sie unter Abfrage-Generator-Methoden (Entity Framework).

Entity Framework enthält den EntityClient-Datenanbieter. Dieser Anbieter verwaltet Verbindungen, übersetzt Entitätsabfragen in datenquellenspezifische Abfragen und gibt einen Datenleser zurück, mit dem Entity Framework Entitätsdaten in Objekte umsetzt. Wenn die Umsetzung in Objekte nicht erforderlich ist, kann der EntityClient-Anbieter auch wie ein ADO.NET-Standarddatenanbieter verwendet werden, indem er Anwendungen das Ausführen von Entity SQL -Abfragen und die Verarbeitung des zurückgegebenen schreibgeschützten Datenlesers ermöglicht. Weitere Informationen finden Sie unter EntityClient-Anbieter für 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 von ObjectContext abgeleitete Klasse generieren, die den Entitätencontainer 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. Weitere Informationen finden Sie unter Erstellen, Hinzufügen, Ändern und Löschen von Objekten (Entity Framework).

Datenanbieter

Der EntityClient-Anbieter erweitert das ADO.NET-Anbietermodell, indem auf Daten im Sinne von konzeptionellen Entitäten und Beziehungen zugegriffen wird. Es führt Abfragen aus, die Entity SQL verwenden. Entity SQL stellt die zugrunde liegende Abfragesprache bereit, die EntityClient ermöglicht, mit der Datenbank zu kommunizieren. Weitere Informationen finden Sie unter EntityClient-Anbieter für Entity Framework.

Entity Framework enthält einen aktualisierten SqlClient-Datenanbieter, der kanonische Befehlsstrukturen unterstützt. Weitere Informationen finden Sie unter .NET Framework-Datenanbieter für SQL Server (SqlClient) für das Entity Framework.

Entity Data Model-Tools

.NET Framework Version 4 enthält zusammen mit der Entity Framework -Laufzeit den EDM-Generator (EdmGen.exe). Dieses Befehlszeilendienstprogramm stellt eine Verbindung zu einer Datenquelle her und erstellt Modell- und Zuordnungsdateien auf der Grundlage einer 1:1-Zuordnung zwischen Entitäten und Tabellen. Außerdem verwendet es eine Konzeptmodelldatei (.csdl), um eine Objektebenendatei mit Klassen zu erzeugen, die Entitätstypen und den ObjectContext darstellen. Weitere Informationen finden Sie unter EDM-Generator (EdmGen.exe).

Visual Studio 2010 bietet umfangreiche Unterstützung für Tools zum Generieren und Verwalten von Modell- und Zuordnungsdateien in einer Visual Studio-Anwendung. Der Entity Data Model -Designer unterstützt das Erstellen erweiterter Zuordnungsszenarien, wie beispielsweise "Tabelle pro Typ"- und "Tabelle pro Hierarchie"-Vererbung und aufgeteilte Entitäten, die mehreren Tabellen zugeordnet sind. Weitere Informationen finden Sie unter ADO.NET Entity Data Model Designer.

Weitere Informationen

Anhand der folgenden Themen können Sie mehr über Entity Framework erfahren:

  • Schnellstart (Entity Framework)
    Hier erfahren Sie, wie die Entity Data Model -Tools mit verwendet werden, um schnell die erste Entity Framework -Anwendung zu erstellen.
  • Entity Framework-Terminologie
    Hier werden viele der durch das Entity Data Model und Entity Framework eingeführten und in der Entity Framework -Dokumentation verwendeten Begriffe definiert.
  • Entity Framework-Ressourcen
    Hier werden Links zu konzeptionellen Themen und externen Themen und Ressourcen für das Erstellen von Entity Framework -Anwendungen bereitgestellt.

Siehe auch

Konzepte

ADO.NET Entity Framework