Einführung in Entity Framework

Entity Framework ist ein Satz von Technologien in ADO.NET, die die Entwicklung datenorientierter 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 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. Dies wird dadurch erreicht, dass die Abstraktionsebene, auf der Entwickler beim Umgang mit Daten arbeiten können, angehoben wurde, und der zum Erstellen und Verwalten von datenorientierten Anwendungen erforderliche Code reduziert wurde. Da Entity Framework eine Komponente von .NET Framework ist, können Entity Framework-Anwendungen auf jedem Computer ausgeführt werden, auf dem .NET Framework 3.5 Service Pack 1 (SP1) installiert ist.

Konzeptionelle Modelle für den praktischen Einsatz

Ein seit langem bestehendes und allgemein bekanntes Entwurfsmuster für die Datenmodellierung besteht in der Aufteilung des Datenmodells in drei Teile: ein konzeptionelles Modell, ein logisches Modell und ein physisches Modell. Das konzeptionelle Modell definiert die Entitäten und Beziehungen im 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. Konzeptionelle Modelle 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 konzeptionelle Modelle mit Leben, indem es Entwicklern die Möglichkeit bietet, Entitäten und Beziehungen im konzeptionellen Modell 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 das Mapping zwischen beiden werden in einer externen Spezifikation dargestellt, die als Entitätsdatenmodell (EDM) bezeichnet wird. Das Speichermodell und Mappings können bei Bedarf geändert werden, ohne dass Änderungen am konzeptionellen Modell, an Datenklassen oder am Anwendungscode erforderlich sind. Da Speichermodelle anbieterspezifisch sind, können Sie mit einem konsistenten konzeptionellen Modell bei verschiedenen Datenquellen arbeiten.

Ein EDM wird durch die folgenden drei Modell- und Mappingdateien definiert, die entsprechende Dateinamenerweiterungen haben:

  • Datei für die konzeptionelle Schemadefinitionssprache (.csdl) – definiert das konzeptionelle Modell.

  • Datei für die Datenspeicherschema-Definitionssprache (.ssdl) – definiert das Speichermodell, das auch als logisches Modell bezeichnet wird.

  • Datei für die Mapping-Spezifikationssprache (.msl) – definiert das Mapping zwischen Speichermodell und konzeptionellen Modell.

Entity Framework verwendet diese XML-basierten Modell- und Mappingdateien, 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. Das EDM unterstützt sogar das Mapping von Entitäten im konzeptionellen Modell zu gespeicherten Prozeduren in der Datenquelle. Weitere Informationen finden Sie unter Datenmodellierung im Entity Framework.

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 recht genau widerspiegelt, passen diese Strukturen nicht perfekt zusammen. Oft entsprechen mehrere normalisierte Tabellen einer einzigen Klasse, und Beziehungen zwischen Klassen werden nicht auf dieselbe Weise dargestellt wie Beziehungen zwischen Tabellen. Um beispielsweise den Kunden für einen Auftrag darzustellen, verwendet die Order-Klasse eine Eigenschaft, die einen Verweis auf eine Instanz einer Customer-Klasse enthält. Eine Zeile in der Order-Tabelle in einer Datenbank enthält jedoch eine Fremdschlüsselspalte (oder mehrere Spalten als Fremdschlüssel) mit einem Wert, 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. Die Customer-Tabelle in einer Datenbank verfügt jedoch nicht über eine vergleichbare Spalte.

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 Entitätsdatenmodell-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 von Basisklassen abgeleitet, die Object Services 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 Navigationseigenschaften verknüpft sind. Weitere Informationen zu Object Services finden Sie unter Übersicht über Object Services (Entity Framework).

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. Object Services verwendet das EDM, um Objektabfragen von Entitätstypen, die im konzeptionellen Modell dargestellt werden, in datenquellenspezifische Abfragen zu übersetzen. Abfrageergebnisse werden in Objekte umgesetzt, die von Object Services verwaltet werden. Entity Framework bietet die folgenden Möglichkeiten, ein EDM 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 Übersicht über LINQ to Entities.

  • Entity SQL – ein speicherunabhängiger SQL-Dialekt, der direkt mit Entitäten im konzeptionellen Modell arbeitet und EDM-Features, wie beispielsweise Vererbung und Beziehungen, unterstützt. Entity 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 Übersicht über Entity SQL.

  • Abfrage-Generator-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 Object Services 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 das Entity Framework.

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

Diagramm zur Entity Framework-Architektur

Entity Framework generiert eine von ObjectContext abgeleitete Klasse, die den im konzeptionellen Modell definierten Entitätencontainer 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 Hinzufügen, Ändern und Löschen von Objekten (Entity Framework).

Entity Data Model-Tools

.NET Framework 3.5 SP1 enthält zusammen mit der Entity Framework-Laufzeit den EDM-Generator (EdmGen.exe). Dieses Befehlszeilendienstprogramm stellt eine Verbindung zu einer Datenquelle her und erstellt ein EDM auf der Grundlage eines 1:1-Mappings 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 2008 bietet umfangreiche Unterstützung für Tools zum Generieren und Verwalten eines EDM in einer Visual Studio-Anwendung. Der Entitätsdatenmodell-Designer unterstützt das Erstellen erweiterter Mappingszenarien, wie beispielsweise "Tabelle pro Typ"- und "Tabelle pro Hierarchie"-Vererbung und aufgeteilte Entitäten, die mehreren Tabellen zugeordnet sind. Weitere Informationen finden Sie unter Übersicht über den 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 Entitätsdatenmodell-Tools mit Visual Studio 2008 verwendet werden, um schnell die erste Entity Framework-Anwendung zu erstellen.
  • Anwendungsszenarios (Entity Framework)
    Dieses Thema bietet aufgabenbezogene Links zu Themen, die zu speziellen Anwendungsszenarien passen, wie beispielsweise das Schreiben von Abfragen, das Binden von Objekten an Datensteuerelemente oder die Implementierung der Geschäftslogik.
  • Entity Framework-Features
    Dieses Thema bietet ausführliche Informationen zu den Features, aus denen Entity Framework besteht, sowie Links zu Themen, in denen diese Features besprochen werden.
  • Entity Framework-Terminologie
    Hier werden viele der durch das EDM 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

Weitere Ressourcen

ADO.NET Entity Framework