Leanpub Header

Skip to main content

Moderne Datenzugriffslösungen mit Entity Framework Core 2.1/2.2

Datenbankprogrammierung mit C# in .NET/.NET Core/Xamarin

Dies ist die Version 6.3 dieses Buchs, die am 10.02.2019 im Umfang von 613 Seiten erschienen ist. Dieses Buch betrachtet die Versionen 2.1 (RTM) und 2.2 (RTM) von Entity Framework Core. Das Buch enthält alle wichtigen Szenarien des Datenbankzugriffs, Architekturfragen, Praxislösungen sowie zahlreiche Tipps und Tricks.

This book is available in multiple packages!

Pick Your Package
PDF
166
Readers
615
Pages
About

About

About the Book

Entity Framework Core ist der neue Objekt-Relationale Mapper und die aktuelle Datenzugriffstechnik von Microsoft für .NET-, .NET Core-, UWP- und Xamarin-Anwendungen. Das Buch enthält alle wichtigen Szenarien des Datenbankzugriffs auf Microsoft SQL Server, SQLite und Oracle: Konzepte und Installation von Entity Framework Core, Reverse Engineering bestehender Datenbanken und Forward Engineering inkl. Schemamigrationen, Microsoft SQL Server und SQLite, Daten lesen und ändern mit LINQ, Dynamic LINQ, API, SQL, Views, Stored Procedures und Table Value Functions, Objektbeziehungen und Ladestrategien, Change Tracking, Protokollierung, Datenänderungskonflikte, Transaktionen, Leistungsoptimierung, asynchrone Programmierung sowie die Zusatzprodukte Entity Framework Core Power Tools, LINQPad, Entity Developer, Entity Framework Profiler, EFPlus und AutoMapper. Auch der Praxiseinsatz von Entity Framework Core in der Softwarearchitektur wird diskutiert und anhand von Fallbeispielen in Windows Universal Apps, Xamarin und ASP.NET Core implementiert. Zudem enthält das Buch zahlreiche Tipps und Tricks.

Das Buch richtet sich an Softwareentwickler, die bereits grundlegende Erfahrung mit .NET und C# sowie mit relationalen Datenbanken gesammelt haben und nun Entity Framework Core zur Erstellung von performantem und plattformunabhängigem Datenzugriffscode in .NET, .NET Core, UWP Apps oder Xamarin einsetzen wollen. Vorkenntnisse in Vorgängerprodukten wie ADO.NET und dem klassischen ADO.NET Entity Framework oder anderen OR-Mappern sind zum Verständnis des Buchs nicht notwendig.

Packages

Pick Your Package

All packages include the ebook in the following formats: PDF

Nur das E-Book (PDF)

Minimum price

Suggested price$44.00

Nur das E-Book ohne Programmcodebeispiele

$35.00

    E-Book (PDF) und Programmcodebeispiele

    Minimum price

    Suggested price$49.00

    Dieses Paket enthält neben dem E-Book auch zahlreiche C#-Programmcodebeispiele für den Einsatz von Entity Framework Core in Form von Archiv-Dateien mit Visual Studio-Projekten für Visual Studio 2017/2019.

    $44.00

    • Programmcodebeispiele zum Buch
      Zahlreiche Programmcodebeispiele für den Einsatz von Entity Framework Core in Form von ZIP-/RAR-Archiv-Dateien mit Visual Studio-Projekten für Visual Studio.

    Author

    About the Author

    Dr. Holger Schwichtenberg

    Dr. Holger Schwichtenberg - alias der "DOTNET-DOKTOR" - ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 54 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Seine persönlichen Tätigkeitsschwerpunkte sind Webanwendungen, verteilte Systeme, systemnahe Programmierung und Datenbankzugriffe. Er programmiert leidenschaftlich in C# und JavaScript/TypeScript sowie PowerShell.

    Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 95 Fachbücher für O’Reilly, Addison-Wesley, Microsoft Press, Apress und dem Hanser-Verlag gehört er zu den bekanntesten Softwareentwicklungsexperten in Deutschland. Er schreibt regelmäßig für die iX, die dotnetpro, windows developer und heise.de. Dadurch hat in seiner Karriere bereits über 1600 Fachartikel veröffentlicht. Von Microsoft wird er für sein .NET-Fachwissen seit nunmehr 22 Jahren kontinuierlich als Microsoft Most Valuable Professional (MVP) ausgezeichnet.

     

    Sein Weblog finden Sie unter https://www.dotnet-doktor.de. Bei X folgen Sie ihm unter @DOTNETDOKTOR.

    Contents

    Table of Contents

    1 Inhaltsverzeichnis 4

    2 Vorwort 18

    3 Über den Autor 19

    4 Über dieses Buch 20

    4.1 Versionsgeschichte dieses Buchs 20

    4.2 Bezugsquelle für Aktualisierungen 26

    4.3 Geplante Kapitel 26

    4.4 Programmiersprache in diesem Buch 27

    5 Fallbeispiele in diesem Buch 28

    5.1 Entitäten 28

    5.2 Englische Version des Beispiels 32

    5.3 Anwendungsarten in diesem Buch 32

    5.4 Hilfsroutinen zur Konsolenausgabe 33

    6 Programmcodebeispiel zum Download 39

    7 Was ist Entity Framework Core? 40

    7.1 Was ist ein Objekt-Relationaler Mapper (ORM)? 40

    7.2 ORM in der .NET-Welt 41

    7.3 Versionsgeschichte von Entity Framework Core 42

    7.4 Unterstützte Betriebssysteme 44

    7.5 Unterstützte .NET-Versionen 44

    7.6 Unterstützte Visual Studio-Versionen 45

    7.7 Unterstützte Datenbanken 45

    7.8 Funktionsumfang von Entity Framework Core 47

    7.9 Funktionen, die dauerhaft entfallen 47

    7.10 Funktionen, die Microsoft bald nachrüsten will 48

    7.11 Hohe Priorität, aber nicht kritisch 49

    7.12 Neue Funktionen in Entity Framework Core 50

    7.13 Einsatzszenarien für Entity Framework Core 50

    7.14 Migration von ADO.NET Entity Framework zu Entity Framework Core 51

    8 Installation von Entity Framework Core 53

    8.1 Nuget-Pakete 53

    8.2 Paketinstallation 55

    8.3 Aktualisierung auf eine neue Version 59

    9 Konzepte von Entity Framework Core 64

    9.1 Vorgehensmodelle bei Entity Framework Core 64

    9.2 Artefakte bei Entity Framework Core 67

    10 Reverse Engineering bestehender Datenbanken 69

    10.1 Reverse Engineering-Werkzeuge 69

    10.2 Vorbereiten des Reverse Engineering mit PowerShell-Befehlen 69

    10.3 Codegenerierung 71

    10.4 Generierter Programmcode 75

    10.5 Beispiel-Client 80

    10.6 .NET Core-Tool 81

    10.7 Schwächen des Reverse Engineering 83

    11 Forward Engineering für neue Datenbanken 85

    11.1 Zwei Klassentypen beim Forward Engineering 85

    11.2 Beispiele in diesem Kapitel 85

    11.3 Regeln für die selbsterstellten Entitätsklassen 86

    11.3.1 Nuget-Pakete 86

    11.3.2 Properties 87

    11.3.3 Datentypen 87

    11.3.4 Beziehungen (Master-Detail) 87

    11.3.5 Vererbung 90

    11.3.6 Primärschlüssel 90

    11.3.7 Beispiele 90

    11.4 Regeln für die selbsterstellte Kontextklasse 93

    11.4.1 Nuget-Pakete 93

    11.4.2 Basisklasse 94

    11.4.3 Konstruktor 94

    11.4.4 Verweise zu den Entitätsklassen 94

    11.4.5 Provider und Verbindungszeichenfolge 94

    11.4.6 Beispiel für eine selbsterstellte Kontextklasse 96

    11.4.7 Verwendung von DbContextOptions 96

    11.4.8 Eigenes Datenbankverbindungsamanagement 98

    11.4.9 Flexible Konfiguration der Kontextklasse 98

    11.4.10 Thread-Sicherheit 98

    11.5 Regeln für die Datenbankschemagenerierung 98

    11.6 Beispiel-Client 99

    11.7 Anpassung per Fluent-API (OnModelCreating()) 100

    11.8 Das erzeugte Datenmodell 102

    12 Anpassung des Datenbankschemas 105

    12.1 Beispiele in diesem Kapitel 105

    12.2 Konvention versus Konfiguration 105

    12.3 Persistente versus transiente Klassen 106

    12.4 Namen im Datenbankschema 107

    12.5 Reihenfolge der Spalten in einer Tabelle 108

    12.6 Spaltentypen/Datentypen 109

    12.7 Typkonvertierungen 110

    12.8 Pflichtfelder und optionale Felder 110

    12.9 Feldlängen 111

    12.10 Primärschlüssel 111

    12.11 Beziehungen und Fremdschlüssel 111

    12.12 Optionale Beziehungen und Pflichtbeziehungen 112

    12.13 Uni- und Bidirektionale Beziehungen 114

    12.14 1:1-Beziehungen 115

    12.15 Indexe festlegen 116

    12.16 Vererbung 117

    12.16.1 Vererbungsstrategien 117

    12.16.2 TPH und TPCT in Entity Framework Core 119

    12.16.3 Mischung von TPCT und TPH 127

    12.16.4 Konsistenzprobleme bei TPH 128

    12.16.5 Erzwingen von TPH 129

    12.16.6 Konfiguration der Diskriminatorspalte bei TPH 129

    12.17 Syntaxoptionen für das Fluent-API 131

    12.17.1 Sequentielle Konfiguration 131

    12.17.2 Strukturierung durch Statement Lambdas 131

    12.17.3 Strukturierung durch Unterroutinen 132

    12.17.4 Strukturierung durch Konfigurationsklassen 133

    12.18 Massenkonfiguration mit dem Fluent-API 134

    13 Datenbankschemamigrationen 135

    13.1 Anlegen der Datenbank zur Laufzeit 135

    13.2 Schemamigrationen zur Entwicklungszeit 136

    13.3 Befehle für die Schemamigrationen 136

    13.4 ef.exe 137

    13.5 Add-Migration 138

    13.6 Update-Database 142

    13.7 Schemamigrationen bei der Installation 144

    13.8 Remove-Migration 144

    13.9 Script-Migration 144

    13.10 Schemamigrationen zur Laufzeit 145

    13.10.1 Verwendung von Migrate() 145

    13.10.2 IMigrator-Service 146

    13.10.3 Informationen zum Migrationsstand 146

    13.10.4 Praxiseinsatz: Ein Kommandozeilenwerkzeug für die Schemamigration 147

    13.11 Schemamigrationsszenarien 151

    13.11.1 Neue Tabellen und Spalten 151

    13.11.2 Tabellen oder Spalten löschen 153

    13.11.3 Tabellen oder Spalten umbenennen 153

    13.11.4 Spaltendatentyp ändern 153

    13.11.5 NULL-Werte verbieten 154

    13.11.6 Kardinalitäten ändern 155

    13.11.7 Andere Datenbankartefakte anlegen 156

    13.11.8 SQL-Skriptdateien ausführen 158

    13.11.9 Eigenständige Entitäten bilden 159

    13.12 Weitere Möglichkeiten 162

    13.13 Probleme bei der Schemamigration in Verbindung mit TFS 163

    13.14 Startverhalten von Entity Framework Core 163

    14 Daten lesen mit LINQ 164

    14.1 Kontextklasse 164

    14.2 LINQ-Abfragen 164

    14.3 Schrittweises Zusammensetzung von LINQ-Abfragen 167

    14.4 Einsatz von var 168

    14.5 Repository-Pattern 168

    14.6 LINQ-Abfragen mit Paging 172

    14.7 Projektionen 173

    14.7.1 Projektion auf einen Entitätstypen 174

    14.7.2 Projektionen auf einen anonymen Typen 174

    14.7.3 Projektionen auf einen beliebigen Typen 176

    14.8 Abfrage nach Einzelobjekten 177

    14.9 Laden anhand des Primärschlüssels mit Find() 178

    14.10 Gruppierungen 179

    14.11 Umgehung für das GroupBy-Problem 181

    14.11.1 Mapping auf Nicht-Entitätstypen 181

    14.11.2 Entitätsklasse für die Datenbanksicht anlegen 182

    14.11.3 Einbinden der Entitätsklasse in die Kontextklasse 182

    14.11.4 Verwendung der Pseudo-Entitätsklasse 183

    14.11.5 Herausforderung: Migrationen 184

    14.11.6 Gruppierungen mit Datenbanksichten 185

    14.12 LINQ im RAM statt in der Datenbank (Client Evaluation) 186

    14.13 Falsche Befehlsreihenfolge 187

    14.14 Eigene Funktionen in LINQ 188

    14.15 Kurzübersicht über die LINQ-Syntax 189

    14.15.1 Einfache SELECT-Befehle (Alle Datensätze) 190

    14.15.2 Bedingungen (where) 190

    14.15.3 Bedingungen mit Mengen (in) 191

    14.15.4 Sortierungen (orderby) 191

    14.15.5 Paging (Skip() und Take()) 191

    14.15.6 Projektion 192

    14.15.7 Aggregatfunktionen (Count(), Min(), Max(), Average(), Sum()) 192

    14.15.8 Gruppierungen (GroupBy) 193

    14.15.9 Einzelobjekte (SingleOrDefault(), FirstOrDefault()) 193

    14.15.10 Verbundene Objekte (Include()) 194

    14.15.11 Inner Join (Join) 195

    14.15.12 Cross Join (Kartesisches Produkt) 195

    14.15.13 Join mit Gruppierung 196

    14.15.14 Unter-Abfragen (Sub-Select) 196

    14.16 Lokaler Objektzwischenspeicher in der Kontextklasse 197

    15 Objektbeziehungen und Ladestrategien 202

    15.1 Überblick über die Ladestrategien 202

    15.2 Standardverhalten 202

    15.3 Lazy Loading 204

    15.3.1 Aktivierung des Lazy Loading 204

    15.3.2 Gefahren von Lazy Loading 206

    15.3.3 Lazy Loading ohne Proxyklassen 207

    15.4 Explizites Nachladen (Explicit Loading) 210

    15.5 Eager Loading 212

    15.6 Relationship Fixup 215

    15.6.1 Beispiel für Fall 1 216

    15.6.2 Beispiel für Fall 2 217

    15.6.3 Beispiel für Fall 3 218

    15.7 Preloading mit Relationship Fixup 220

    16 Einfügen, Löschen und Ändern 225

    16.1 Speichern mit SaveChanges() 225

    16.2 Änderungsverfolgung auch für Unterobjekte 227

    16.3 Zusammenfassen von Befehlen (Batching) 228

    16.4 Das Foreach-Problem 229

    16.5 Objekte hinzufügen mit Add() 230

    16.6 Verbundene Objekte anlegen 232

    16.7 Verbundene Objekte ändern / Relationship Fixup 235

    16.8 Widersprüchliche Beziehungen 237

    16.8.1 Objekte löschen mit Remove() 242

    16.8.2 Löschen mit einem Attrappen-Objekt 244

    16.8.3 Massenlöschen 245

    16.9 Datenbanktransaktionen 246

    16.9.1 Transaktion in einer Kontextinstanz 246

    16.9.2 Transaktion über mehrere Kontextinstanzen ohne TransactionScope 247

    16.9.3 Transaktion über mehrere Kontextinstanzen mit TransactionScope 249

    16.10 Change Tracker abfragen 251

    16.10.1 Zustand eines Objekts 251

    16.10.2 Liste aller geänderten Objekte 253

    17 Datenänderungskonflikte (Concurrency) 256

    17.1 Rückblick 256

    17.2 Im Standard keine Konflikterkennung 257

    17.3 Optimistisches Sperren / Konflikterkennung 258

    17.4 Konflikterkennung für alle Eigenschaften 259

    17.5 Konflikteinstellung per Konvention 260

    17.6 Fallweise Konflikteinstellung 261

    17.7 Zeitstempel (Timestamp) 261

    17.8 Konflikte auflösen 263

    17.9 Pessimistisches Sperren bei Entity Framework Core 267

    18 Protokollierung (Logging) 271

    18.1 Verwendung der Erweiterungsmethode Log() 271

    18.2 Implementierung der Log()-Erweiterungsmethode 273

    18.3 Protokollierungskategorien 277

    18.4 EnableSensitiveDataLogging 278

    19 Asynchrone Programmierung 279

    19.1 Asynchrone Erweiterungsmethoden 279

    19.2 ToListAsync() 279

    19.3 SaveChangesAsync() 280

    19.4 ForeachAsync() 281

    20 Dynamische LINQ-Abfragen 283

    20.1 Schrittweises zusammensetzen von LINQ-Abfragen 283

    20.2 Expression Trees 284

    20.3 Dynamic LINQ 287

    21 Daten lesen und ändern mit SQL, Stored Procedures und Table Valued Functions 290

    21.1 Abfragen mit FromSql() 290

    21.2 Zusammensetzbarkeit von LINQ und SQL 292

    21.3 Stored Procedures und Table Valued Functions 293

    21.4 Nicht-Entitätsklassen als Ergebnismenge 295

    21.5 Erweiterungsmethode ExecuteSqlQuery() 296

    21.6 SQL-DML-Befehle ohne Resultset 297

    22 Weitere Tipps und Tricks zum Mapping 298

    22.1 Shadow Properties 298

    22.1.1 Automatische Shadow Properties 298

    22.1.2 Festlegung eines Shadow Property 299

    22.1.3 Ausgabe aller Shadow Properties einer Entitätsklasse 299

    22.1.4 Lesen und Ändern eines Shadow Property 299

    22.1.5 LINQ-Abfragen mit Shadow Properties 301

    22.1.6 Praxisbeispiel: Automatisches Setzen bei jedem Speichern 301

    22.1.7 Praxisbeispiel: Erweitern der Tabellen zur Betriebszeit der Anwendung 302

    22.2 Berechnete Spalten (Computed Columns) 304

    22.2.1 Automatisches SELECT 304

    22.2.2 Praxistipp: Spalten mit einer Berechnungsformel anlegen 305

    22.2.3 Spalten mit einer Berechnungsformel nutzen 306

    22.2.4 Spalten mit einer Berechnungsformel beim Reverse Engineering 308

    22.3 Standardwerte (Default Values) 308

    22.3.1 Standardwerte beim Forward Engineering festlegen 309

    22.3.2 Standardwerte verwenden 309

    22.3.3 Praxistipp: Standardwerte schon beim Anlegen des Objekts vergeben 311

    22.3.4 Standardwerte beim Reverse Engineering 312

    22.4 Tabellenaufteilung (Table Splitting) mit Owned Types 312

    22.4.1 Owned Types 313

    22.4.2 Weitere Möglichkeiten mit Owned Types 319

    22.4.3 Daten schreiben und lesen mit Owned Types 321

    22.4.4 Einschränkungen bei Owned Types 322

    22.5 Sequenzobjekte (Sequences) 323

    22.5.1 Was sind Sequenzen? 323

    22.5.2 Erstellen von Sequenzen mit T-SQL 324

    22.5.3 Erstellen von Sequenzen beim Forward Engineering 326

    22.5.4 Sequenzen im Einsatz 327

    22.6 Alternative Schlüssel 330

    22.6.1 Alternative Schlüssel definieren 331

    22.6.2 Alternative Schlüssel im Einsatz 333

    22.7 Kaskadierendes Löschen (Cascading Delete) 336

    22.7.1 Löschoptionen in Entity Framework Core 336

    22.7.2 Beispiel 338

    22.8 Abbildung von Datenbanksichten (Views) 343

    22.8.1 Datenbanksicht anlegen 343

    22.8.2 Entitätsklasse für die Datenbanksicht anlegen 344

    22.8.3 Einbinden der Entitätsklasse in die Kontextklasse 344

    22.8.4 Verwendung der Datenbanksicht 345

    22.8.5 Herausforderung: Migrationen 347

    22.9 Wertkonvertierungen (Value Converter) 348

    22.9.1 Einschränkungen 349

    22.9.2 Beispiel 1: Konvertierung zwischen String und Boolean 349

    22.9.3 Beispiel 2: Konvertierung zwischen Aufzählungstyp und String 352

    22.10 Datenbefüllung bei der Schemamigration (Data Seeding) 356

    22.10.1 Herausforderung Shadow Properties 359

    22.10.2 Bug bei berechneten Spalten 361

    23 Weitere Tipps und Tricks zu LINQ und SQL 363

    23.1 Globale Abfragefilter (ab Version 2.0) 363

    23.1.1 Filter definieren 363

    23.1.2 Filter nutzen 363

    23.1.3 Praxistipp: Filter ignorieren 364

    23.1.4 Globale Abfragefilter bei SQL-Abfragen (ab Version 2.0) 364

    23.1.5 Globale Abfragefilter bei Stored Procedures und Table Valued Functions 365

    23.2 Zukünftige Abfragen (Future Queries) 365

    23.2.1 Konzept der Future Queries 365

    23.2.2 Future() 366

    23.2.3 FutureValue() 367

    23.2.4 Bug in Verbindung mit EF Profiler 368

    23.3 Query Tags (ab Version 2.2) 369

    23.3.1 Einsatz von TagWith() 369

    23.3.2 Einschränkungen 372

    23.4 Benachrichtigungen bei Datenänderungen (Query Notifications) 372

    23.4.1 SqlDependency für Microsoft SQL Server 372

    23.4.2 Aufbau des SQL-Befehls 373

    23.4.3 Query Notification in einer Konsolenanwendungen 374

    23.4.4 Diagnosemöglichkeiten 377

    23.4.5 Query Notification in einer Desktop-Anwendungen 378

    24 Leistungsoptimierung (Performance Tuning) 384

    24.1 Vorgehensmodell zur Leistungsoptimierung bei Entity Framework Core 384

    24.2 Best Practices für Ihre eigenen Leistungstests 384

    24.3 Leistungsvergleich verschiedener Datenzugriffstechniken in .NET 385

    24.4 Objektzuweisung optimieren 386

    24.5 Massenoperationen 389

    24.5.1 Einzellöschen 389

    24.5.2 Optimierung durch Batching 389

    24.5.3 Löschen ohne Laden mit Pseudo-Objekten 391

    24.5.4 Einsatz von klassischem SQL anstelle des Entity Framework Core-APIs 392

    24.5.5 Lamdba-Ausdrücke für Massenlöschen mit EFPlus 394

    24.5.6 Massenaktualisierung mit EFPlus 396

    24.5.7 Optionen für Update() und Delete() bei EFPlus 396

    24.6 Leistungsoptimierung durch No-Tracking 397

    24.6.1 No-Tracking aktivieren 397

    24.6.2 No-Tracking fast immer möglich 398

    24.6.3 No-Tracking im änderbaren Datagrid 401

    24.6.4 QueryTrackingBehavior und AsTracking() 409

    24.6.5 Konsequenzen des No-Tracking-Modus 411

    24.6.6 Best Practices 411

    24.7 Auswahl der besten Ladestrategie 412

    24.8 Zwischenspeicherung (Caching) 412

    24.8.1 MemoryCache 413

    24.8.2 CacheManager 415

    24.9 Second-Level-Caching mit EFPlus 422

    24.9.1 Einrichten des Second-Level-Cache 423

    24.9.2 Verwenden des Second-Level-Cache 423

    25 Softwarearchitektur mit Entity Framework Core 426

    25.1 Monolithisches Modell 426

    25.2 Entity Framework Core als Datenzugriffsschicht 427

    25.3 Reine Geschäftslogik 428

    25.4 Geschäftsobjekt- und ViewModel-Klassen 429

    25.5 Verteilte Systeme 430

    25.6 Fazit 433

    26 Zusatzwerkzeuge 434

    26.1 Entity Framework Core Power Tools 434

    26.1.1 Funktionsüberblick 434

    26.1.2 Reverse Engineering mit Entity Framework Core Power Tools 435

    26.1.3 Schemamigrationen mit Entity Framework Core Power Tools 440

    26.1.4 Diagramme mit Entity Framework Core Power Tools 442

    26.2 LINQPad 443

    26.2.1 Aufbau von LINQPad 444

    26.2.2 Datenquellen einbinden 444

    26.2.3 LINQ-Befehle ausführen 448

    26.2.4 Abspeichern 450

    26.2.5 Weitere LINQPad-Treiber 450

    26.2.6 Interaktive Programmcodeeingabe 451

    26.2.7 Fazit zu LINQPad 452

    26.3 Entity Developer 452

    26.3.1 Auswahl der ORM-Technik 453

    26.3.2 Reverse Engineering mit Entity Developer 455

    26.3.3 Forward Engineering mit Entity Developer 464

    26.4 Entity Framework Profiler 469

    26.4.1 Einbinden des Entity Framework Profilers 471

    26.4.2 Befehle überwachen mit Entity Framework Profiler 471

    26.4.3 Warnungen vor potenziellen Problemen 474

    26.4.4 Analysefunktionen 475

    26.4.5 Kommandozeilenunterstützung und API 476

    26.4.6 Fazit zu Entity Framework Profiler 476

    27 Zusatzkomponenten 477

    27.1 Oracle-Treiber von DevArt (dotConnect for Oracle) 477

    27.1.1 Unterstützte Oracle-Versionen 477

    27.1.2 Installation 477

    27.1.3 Visual Studio-Integration 479

    27.1.4 Datenbanktreibername 482

    27.1.5 Entity Framework Core-Werkzeuge 482

    27.1.6 Kontextklasse 483

    27.1.7 Entitätsklassen 483

    27.1.8 Datentypen 483

    27.2 Entity Framework Plus (EFPlus) 485

    27.2.1 Herausforderung Shadow Properties 488

    27.2.2 Bug bei berechneten Spalten 490

    27.3 Second-Level-Caching mit EFSecondLevelCache.Core 492

    27.4 Objekt-Objekt-Mapping mit AutoMapper 492

    27.4.1 Objekt-Objekt-Mapping per Reflection 494

    27.4.2 AutoMapper 497

    27.4.3 Beispielszenario 497

    27.4.4 Abbildungen konfigurieren 499

    27.4.5 Abbildung ausführen mit Map() 499

    27.4.6 Nicht-statisches API 500

    27.4.7 Abbildungskonventionen 500

    27.4.8 Abbildungskonventionen ändern 502

    27.4.9 Profilklassen 502

    27.4.10 Verbundene Objekte 503

    27.4.11 Manuelle Abbildungen 503

    27.4.12 Typkonvertierungen 506

    27.4.13 Objektmengen 507

    27.4.14 Vererbung 508

    27.4.15 Generische Klassen 511

    27.4.16 Zusatzaktionen vor und nach dem Mapping 513

    27.4.17 Geschwindigkeit 515

    27.4.18 Fazit zu AutoMapper 516

    27.5 Andere Erweiterungen 516

    28 Praxislösungen 518

    28.1 Entity Framework Core in einer ASP.NET Core-Anwendung 518

    28.1.1 Das Fallbeispiel "MiracleList" 518

    28.1.2 Architektur 522

    28.1.3 Entitätsklassen 526

    28.1.4 Entity Framework Core-Kontextklasse 528

    28.1.5 Lebensdauer der Kontextklasse in ASP.NET Core-Anwendungen 531

    28.1.6 Geschäftslogik 532

    28.1.7 WebAPI 541

    28.1.8 Verwendung von Entity Framework Core per Dependency Injection 551

    28.1.9 Praxistipp: Kontextinstanzpooling (DbContext Pooling) 554

    28.2 DevOps mit Entity Framework (Continous Integration und Continous Delivery) 554

    28.2.1 Unit Tests und Integrationstests mit Entity Framework Core 555

    28.2.2 In-Memory-Treiber 555

    28.2.3 SQLite- In-Memory-Treiber 558

    28.2.4 Entity Framework Core beim serverseitigen Build (Continous Integration) 560

    28.2.5 Entity Framework Core beim automatischen Release (Continous Delivery) 564

    28.3 Entity Framework Core in einer Universal Windows Platform App 565

    28.3.1 Das Fallbeispiel "MiracleList Light" 565

    28.3.2 Architektur 566

    28.3.3 Entitätsklassen 567

    28.3.4 Entity Framework Core-Kontextklasse 569

    28.3.5 Startcode 569

    28.3.6 Erzeugte Datenbank 570

    28.3.7 Datenzugriffscode 572

    28.3.8 Benutzeroberfläche 576

    28.4 Entity Framework Core in einer Xamarin-Cross-Platform-App 577

    28.4.1 Das Fallbeispiel "MiracleList Light" 577

    28.4.2 Architektur 579

    28.4.3 Entitätsklassen 581

    28.4.4 Entity Framework Core-Kontextklasse 582

    28.4.5 Startcode 583

    28.4.6 Erzeugte Datenbank 584

    28.4.7 Datenzugriffscode 584

    28.4.8 Benutzeroberfläche 587

    28.5 N:M-Beziehungen zu sich selbst 589

    29 Quellen im Internet 596

    30 Stichwortverzeichnis (Index) 597

    Get the free sample chapters

    Click the buttons to get the free sample in PDF or EPUB, or read the sample online here

    The Leanpub 60 Day 100% Happiness Guarantee

    Within 60 days of purchase you can get a 100% refund on any Leanpub purchase, in two clicks.

    Now, this is technically risky for us, since you'll have the book or course files either way. But we're so confident in our products and services, and in our authors and readers, that we're happy to offer a full money back guarantee for everything we sell.

    You can only find out how good something is by trying it, and because of our 100% money back guarantee there's literally no risk to do so!

    So, there's no reason not to click the Add to Cart button, is there?

    See full terms...

    Earn $8 on a $10 Purchase, and $16 on a $20 Purchase

    We pay 80% royalties on purchases of $7.99 or more, and 80% royalties minus a 50 cent flat fee on purchases between $0.99 and $7.98. You earn $8 on a $10 sale, and $16 on a $20 sale. So, if we sell 5000 non-refunded copies of your book for $20, you'll earn $80,000.

    (Yes, some authors have already earned much more than that on Leanpub.)

    In fact, authors have earned over $14 million writing, publishing and selling on Leanpub.

    Learn more about writing on Leanpub

    Free Updates. DRM Free.

    If you buy a Leanpub book, you get free updates for as long as the author updates the book! Many authors use Leanpub to publish their books in-progress, while they are writing them. All readers get free updates, regardless of when they bought the book or how much they paid (including free).

    Most Leanpub books are available in PDF (for computers) and EPUB (for phones, tablets and Kindle). The formats that a book includes are shown at the top right corner of this page.

    Finally, Leanpub books don't have any DRM copy-protection nonsense, so you can easily read them on any supported device.

    Learn more about Leanpub's ebook formats and where to read them

    Write and Publish on Leanpub

    You can use Leanpub to easily write, publish and sell in-progress and completed ebooks and online courses!

    Leanpub is a powerful platform for serious authors, combining a simple, elegant writing and publishing workflow with a store focused on selling in-progress ebooks.

    Leanpub is a magical typewriter for authors: just write in plain text, and to publish your ebook, just click a button. (Or, if you are producing your ebook your own way, you can even upload your own PDF and/or EPUB files and then publish with one click!) It really is that easy.

    Learn more about writing on Leanpub