Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort zur 6. Auflage
1 Allgemeine Einführung in .NET
2 Grundlagen der Sprache C#
3 Das Klassendesign
4 Vererbung, Polymorphie und Interfaces
5 Delegates und Ereignisse
6 Strukturen und Enumerationen
7 Fehlerbehandlung und Debugging
8 Auflistungsklassen (Collections)
9 Generics – Generische Datentypen
10 Weitere C#-Sprachfeatures
11 LINQ
12 Arbeiten mit Dateien und Streams
13 Binäre Serialisierung
14 XML
15 Multithreading und die Task Parallel Library (TPL)
16 Einige wichtige .NET-Klassen
17 Projektmanagement und Visual Studio 2012
18 Einführung in die WPF und XAML
19 WPF-Layout-Container
20 Fenster in der WPF
21 WPF-Steuerelemente
22 Elementbindungen
23 Konzepte von WPF
24 Datenbindung
25 Weitere Möglichkeiten der Datenbindung
26 Dependency Properties
27 Ereignisse in der WPF
28 WPF-Commands
29 Benutzerdefinierte Controls
30 2D-Grafik
31 ADO.NET – Verbindungsorientierte Objekte
32 ADO.NET – Das Command-Objekt
33 ADO.NET – Der SqlDataAdapter
34 ADO.NET – Daten im lokalen Speicher
35 ADO.NET – Aktualisieren der Datenbank
36 Stark typisierte DataSets
37 Einführung in das ADO.NET Entity Framework
38 Datenabfragen des Entity Data Models (EDM)
39 Entitätsaktualisierung und Zustandsverwaltung
40 Konflikte behandeln
41 Plain Old CLR Objects (POCOs)
Stichwort

Download:
- Beispiele, ca. 62,4 MB

Jetzt Buch bestellen
Ihre Meinung?

Spacer
Visual C# 2012 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2012

Visual C# 2012
Rheinwerk Computing
1402 S., 6., aktualisierte und erweiterte Auflage 2013, geb., mit DVD
49,90 Euro, ISBN 978-3-8362-1997-6
Pfeil 37 Einführung in das ADO.NET Entity Framework
Pfeil 37.1 Kritische Betrachtung von ADO.NET
Pfeil 37.2 Ein erstes Entity Data Model (EDM) erstellen
Pfeil 37.3 Das Entity Data Model im Designer
Pfeil 37.3.1 Die übergeordneten Eigenschaften einer Entität
Pfeil 37.3.2 Eigenschaften eines Entitätsobjekts
Pfeil 37.3.3 Assoziationen im Entity Data Model
Pfeil 37.3.4 Der Kontext der Entitäten
Pfeil 37.4 Der Aufbau des Entity Data Models
Pfeil 37.5 Die Klassen des Entity Data Models (EDM)
Pfeil 37.5.1 Die Entitätsklassen
Pfeil 37.5.2 Der ObjectContext
Pfeil 37.6 Die Architektur des Entity Frameworks
Pfeil 37.6.1 Object Services
Pfeil 37.6.2 Die Schichten des Entity Frameworks

37 Einführung in das ADO.NET Entity FrameworkZur nächsten Überschrift

Mit dem Visual Studio 2008 Service Pack 1 wurde die erste Version des ADO.NET Entity Frameworks als neue Plattform für den Datenzugriff veröffentlicht. Das Entity Framework trat damit in Konkurrenz zum klassischen ADO.NET, das bereits mit dem ersten Release von .NET veröffentlicht worden ist. Dennoch kann man das Entity Framework als Aufsatz auf ADO.NET verstehen, mit dem die Differenzen zwischen der objektorientierten Programmierung und den relationalen Datenbanken adressiert werden.


Rheinwerk Computing - Zum Seitenanfang

37.1 Kritische Betrachtung von ADO.NETZur nächsten ÜberschriftZur vorigen Überschrift

In einer Datenbank werden die Daten in Tabellen in Zeilen gespeichert. Jede Zeile setzt sich aus mehreren Spalten zusammen. Dieses tabellenartige Format wurde von vielen Entwicklern übernommen, um die Daten in Anwendungen verfügbar zu machen. Nicht anders ist auch das ADO.NET konzeptioniert.

DataSet und DataReader sind in ADO.NET elementare Objekte, um Daten verfügbar zu machen. Der Einsatz dieser beiden Klassen ist mit wenigen Zeilen Programmcode relativ einfach zu realisieren, und die Objekte können an jedes datenbindungsfähige Steuerelement gebunden werden. Dabei muss man sich vor Augen halten, dass die Bindung an die Struktur einer Datenbank erfolgt. Oder anders ausgedrückt: Die Datenbank bestimmt, wie die Daten in der Anwendung strukturiert werden. Eine Änderung der Datenbank kann sich deshalb katastrophal auf die Anwendung auswirken.

Um die Zellen innerhalb einer DataRow auszuwerten, wird meist mit dem Bezeichner der Spalte gearbeitet, z. B.:

Object pName = ds.Tables[0].Rows["ProductName"];

Dabei handelt es sich um eine Zeichenfolge, die im Code hoffentlich korrekt angegeben wird, denn ansonsten wird die Anwendung beim Testen eine Ausnahme auslösen. Noch schlimmer wäre es, wenn sich nach dem Verteilen der Anwendung der Spaltenbezeichner ändert. Eine Situation, die häufiger auftritt, als Sie vielleicht erwarten. Die Folge wird bestenfalls sein, dass die unweigerlich auftretende Ausnahme zwar behandelt wird, aber die Anwendung nicht mehr richtig funktioniert. Im schlimmsten Fall, wenn nämlich in dem entsprechenden Codeabschnitt keine Ausnahmebehandlung codiert ist, wird die Anwendung unweigerlich abstürzen.

Sehen Sie sich noch einmal die Codezeile von oben an. Sie offenbart ein weiteres Problem. Die Variable ist vom Typ Object. Sie müssen Kenntnis vom tatsächlichen Datentyp haben, der von der Spalte ProductName beschrieben wird, und die Rückgabe entsprechend konvertieren, also:

string pName = (string)ds.Tables[0].Rows["ProductName"];

Die Konvertierung eines Wertetyps in einen Referenztyp und umgekehrt geht zu Lasten der Performance, da sich dabei Vorgänge abspielen, die als Boxing und Unboxing bekannt sind.

Bohren wir ADO.NET weiter auf und betrachten den Typ DataSet nun etwas genauer im Detail. Das DataSet zählt wohl zu den komplexesten Typen im .NET Framework. Jede Instanz dieses Typs enthält ein oder mehrere DataTable-Objekte. Diese wiederum beschreiben eine mehr oder weniger große Anzahl von DataRows und natürlich, nicht zu vergessen, die Spalten vom Typ DataColumn. Die Spalten unterstützen die Versionierung der Datenzeile, enthalten also neben den aktuellen auch die originalen, von der Datenbank bezogenen Werte. Hinzu kommen noch die Beziehungen zwischen den Tabellen, die als Objekte vom Typ DataRelation innerhalb des DataSets verwaltet werden.

Obwohl in manchen Fällen viele der genannten Features nicht genutzt werden, erzeugt das DataSet intern zumindest leere Collections. Häufig werden die Daten auch nur zum Lesen angeboten und können nicht verändert werden. In diesem Fall ist die Versionierung der Datenzeilen innerhalb einer DataTable nutzlos. Das mag in einer Standalone-Anwendung durchaus noch akzeptabel sein, aber in einer Umgebung, bei der man von sehr vielen gleichzeitigen Benutzern ausgehen muss, ist das wenig akzeptabel, beispielsweise in einer Webanwendung.

Vielleicht halten Sie die Argumente gegen ADO.NET für übertrieben. Schließlich sind in der Vergangenheit unzählige Anwendungen auf Basis von ADO.NET entwickelt worden und verrichten ihre Dienste auch nach Jahren noch völlig ohne Probleme. Das wird mit Sicherheit auch noch in Zukunft so sein, man sollte aber auch nicht auf der Stelle verharren, denn Stillstand bedeutet geleichzeitig einen Rückschritt. Zum einen werden immer mehr Anwendungen entwickelt, die von vielen Usern in einer n-Tier-Umgebung gleichzeitig genutzt werden. Andererseits sind wir doch als Entwickler immer bestrebt, besseren und gut wartbaren Code zu schreiben. Hier sind durch ADO.NET Grenzen vorgegeben, die erst durch den konsequenten Einsatz der objektbasierten Programmierung durchbrochen werden können. Genau an dieser Stelle betritt das ADO.NET Entity Framework die Bühne.

Die Organisation der Daten in Klassen

Mit ADO.NET werden die Daten in einen DataReader oder in ein DataSet eingelesen. Diese beiden Typen verwalten jedoch nur Tabellenstrukturen, die in einer Datenbank definiert sind, und stellen nichts anderes dar als untypisierte Container für untypisierte Daten.

Im Gegensatz dazu programmieren Sie mit dem Entity Framework nicht gegen die Datenbank, sondern gegen ein Datenmodell, das vom Entity Framework in Form von Klassen bereitgestellt wird. Die Welt relationaler Datenbanken muss dazu auf das Datenmodell projiziert – man sagt auch gemappt – werden. Daher tritt im Zusammenhang mit dem Entity Framework auch immer der Begriff ORM auf. ORM ist die Abkürzung für Object-relational Mapping.

Daten, die das Resultat einer Datenbankabfrage bilden, werden mit dem Entity Framework nicht mehr in tabellenähnliche Strukturen überführt, sondern an Objekte übergeben. Einfach gesprochen wird für jeden Datensatz aus der Ergebnismenge ein neues Objekt erzeugt. Die Umsetzung einer Tabellenstruktur in Objekte und auch der umgekehrte Weg bei der Speicherung einer Änderung wird vom Entity Framework durchgeführt.

Das Bindeglied zwischen der Datenbank und der Anwendung wird durch das Entity Data Model, kurz EDM, beschrieben. Das EDM repräsentiert nicht nur das Datenmodell, das auch als konzeptionelle Schicht bezeichnet wird. Das Entity Data Model enthält auch eine Beschreibung der Datenbankstruktur, die als logische Schicht bezeichnet wird. Die logische Schicht und die konzeptionelle Schicht müssen miteinander in Beziehung stehen, damit die Daten aus einer Schicht auch den korrespondierenden Punkt der anderen Schicht finden. Für die Umsetzung ist die dritte Schicht im Entity Data Model verantwortlich, die sinnvollerweise im deutschen auch als Zuordnungsschicht bezeichnet wird.

Das Entity Data Model (EDM) bildet den Kern des Entity Frameworks. Sie arbeiten mit den Klassen, die von der konzeptionellen Schicht des EDM bereitgestellt werden. Das Entity Framework seinerseits sorgt dafür, dass die Verbindung zur Datenbank hergestellt wird, es generiert die SQL-Kommandos, um Daten abzufragen, führt die Abfrage aus und überführt die zurückgelieferten Daten in die entsprechenden Objekte. Darüber hinaus verfolgt das EDM alle Aktualisierungen und schreibt die Änderungen in die Datenbank.



Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Visual C# 2012

Visual C# 2012
Jetzt Buch bestellen


 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Rheinwerk-Shop: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Rheinwerk-Shop: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Rheinwerk-Shop: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Rheinwerk-Shop: C++ Handbuch






 C++ Handbuch


Zum Rheinwerk-Shop: C/C++






 C/C++


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2013
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern