Galileo Computing < openbook > Galileo 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

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 41 Plain Old CLR Objects (POCOs)
Pfeil 41.1 Ein erstes Projekt mit POCO-Klassen
Pfeil 41.1.1 Erstellen einfacher POCO-Klassen
Pfeil 41.1.2 Erstellen des Objektkontextes
Pfeil 41.2 Datenabfrage mit Hilfe der POCOs
Pfeil 41.2.1 In Beziehung stehende Daten laden
Pfeil 41.3 Änderungen verfolgen
Pfeil 41.3.1 Die Methode »DetectChanges«
Pfeil 41.3.2 In Beziehung stehende POCOs aktualisieren

Galileo Computing - Zum Seitenanfang

41.2 Datenabfrage mit Hilfe der POCOsZur nächsten Überschrift

So weit wäre alles vorbereitet. Nun sollen die Klassen und das Konzept der POCOs noch getestet werden. Dazu schreiben wir in der Methode Main den folgenden Programmcode:

using (NorthwindContext context = new NorthwindContext())
{
var query = from p in context.Products
where p.Category.CategoryID == 1
select p;
foreach (var item in query)
Console.WriteLine(item.ProductName);
Console.ReadLine();
}

Listing 41.3 Testen der POCO-Klassen

Sie finden das gesamte Projekt auf der Buch-DVD unter ...\Beispiele\Kapitel 41\POCO_ Sample1.


Galileo Computing - Zum Seitenanfang

41.2.1 In Beziehung stehende Daten ladenZur nächsten ÜberschriftZur vorigen Überschrift

Wir müssen an dieser Stelle auch ein paar Worte über das Nachladen verknüpfter Objekte verlieren. In Kapitel 38 haben Sie gelernt, dass Ihnen dazu mit den Methoden Include und Load sowie mit dem Lazy Loading (Deferred Loading) mehrere Möglichkeiten zur Verfügung stehen, EntityObject-Entitäten abzurufen. Natürlich können Sie auch verknüpfte POCO-Entitäten abrufen. Allerdings sind dabei Unterschiede zu beachten – je nachdem, welche Lademethode Sie verwenden.

Die Methode »Include«

Zu der Methode Include, mit der verknüpfte Objekte mit Eager Loading zurückgegeben werden, gibt es nichts weiter zu sagen. Es funktioniert mit POCO-Entitäten genauso wie mit EntityObject-Entitäten.

Laden verknüpfter POCO-Entitäten mit »LoadProperty«

Mit der Methode Load lassen sich verknüpfte EntityObject-Entitäten über die Navigationseigenschaften nachladen. Die Methode wird auf Objekte vom Typ EntityCollection oder EntityReference aufgerufen.

Nun ist es Fakt, dass die Navigationseigenschaften der POCO-Entitäten nicht vom Typ EntityCollection bzw. EntityReference sind. Infolgedessen steht die Load-Methode den POCO-Objekten nicht zur Verfügung. Aus diesem Grund bietet der Objektkontext mit seiner Methode LoadProperty für POCO-Entitäten eine gleichwertige Alternative an.

Wie Sie die LoadProperty-Methode einsetzen können, zeigt das folgende Listing, in dem die verknüpften Produkte einer bestimmten Kategorie abgerufen werden.

using (NorthwindContext context = new NorthwindContext())
{
var cat = context.Categories.First();
context.LoadProperty(cat, c => c.Products);
foreach (var item in cat.Products)
Console.WriteLine(item.ProductName);
}

Listing 41.4 Der Einsatz der Methode »LoadProperty«

Lazy Loading mit POCO-Entitäten

Beim Lazy Loading werden verknüpfte Entitäten beim Zugriff auf eine Navigationseigenschaft automatisch aus der Datenbank nachgeladen. Auch POCOs unterstützen das Lazy Loading. Allerdings muss man dazu auf einen kleinen Trick zurückgreifen: Sie müssen alle Navigationseigenschaften in den POCO-Klassen mit dem Modifizierer virtual kennzeichnen. Um Lazy Loading in unseren POCO-Klassen Product und Category zu ermöglichen, sind also die folgenden Änderungen notwendig:

public class Category {
...
public virtual ICollection<Product> Products { get; set; }
}

public class Product {
...
public virtual Category Category { get; set; }
}

Listing 41.5 POCO-Klassen auf das Lazy Loading vorbereiten

Das ist aber noch nicht alles. In einem weiteren Schritt muss das Lazy Loading des Objektkontextes mit

context.ContextOptions.LazyLoadingEnabled = true;

aktiviert werden.

Das folgende Listing 41.6 zeigt, wie mittels Lazy Loading die Anzahl der Produkte je Kategorie ermittelt werden kann. In dem Beispiel wird die Anzahl der Produkte ermittelt, die zu jeder Kategorie gehören.

using (NorthwindContext context = new NorthwindContext())
{

// Lazy Loading aktivieren

context.ContextOptions.LazyLoadingEnabled = true;
var query = from cat in context.Categories
select cat;
foreach (var item in query)
Console.WriteLine("Kategorie: {0,-15}Anzahl der Produkte: {1}",
item.CategoryName, item.Products.Count());
}

Listing 41.6 Das Lazy Loading testen

Aktivieren Sie das Lazy Loading nicht, erhalten Sie als Ergebnis des Aufrufs zu jeder Kategorie die Zahl »0« ausgegeben.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
<< zurück
  Zum Katalog
Zum Katalog: Visual C# 2012

Visual C# 2012
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Katalog: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: C/C++






 C/C++


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
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.


[Rheinwerk Computing]

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