Leanpub Header

Skip to main content

Moderne Datenzugriffslösungen mit Entity Framework Core 3.0

Datenbankprogrammierung mit C# in .NET Core

Dies ist die Version 7.2 dieses Buchs, die am 29.09.2019 im Umfang von 630 Seiten erschienen ist. Dieses Buch betrachtet die Version 3.0 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
634
Pages
About

About

About the Book

Entity Framework Core 3.0 ist der neue Objekt-Relationale Mapper und die aktuelle Datenzugriffstechnik von Microsoft für .NET Core-basierte Desktop-, Web- und Konsolen-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, 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 ASP.NET Core, Universal Windows Platform (UWP) Apps und Xamarin 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 Core 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

$35.00

    E-Book (PDF) und Programmcodebeispiele (ZIP)

    Minimum price

    Suggested price$49.00

    Dieses Paket enthält neben dem E-Book (PDF) auch zahlreiche C#-Programmcodebeispiele für den Einsatz von Entity Framework Core in Form einer Archiv-Datei 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 3.0 in Form einer ZIP-Archiv-Datei mit Visual Studio-Projekten für Visual Studio 2019.

    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 19

    3 Über den Autor 20

    4 Über dieses Buch 21

    4.1 Versionsgeschichte dieses Buchs 21

    4.2 Bezugsquelle für Aktualisierungen 28

    4.3 Geplante Kapitel 29

    4.4 Programmiersprache in diesem Buch 29

    5 Fallbeispiele in diesem Buch 30

    5.1 Entitäten 30

    5.2 Englische Version des Beispiels 34

    5.3 Anwendungsarten in diesem Buch 34

    5.4 Hilfsroutinen zur Konsolenausgabe 35

    6 Programmcodebeispiel zum Download 41

    6.1 Webadresse für Downloads 41

    6.2 Übersicht über die Beispiele 41

    6.3 Technischer Hinweis zu den Beispielen 43

    6.4 Qualitätssicherung der Beispiele 43

    7 Was ist Entity Framework Core? 45

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

    7.2 ORM in der .NET-Welt 46

    7.3 Versionsgeschichte von Entity Framework Core 47

    7.4 Unterstützte Betriebssysteme 50

    7.5 Unterstützte .NET-Versionen 50

    7.6 Unterstützte Visual Studio-Versionen 52

    7.7 Unterstützte Datenbanken 52

    7.8 Funktionsumfang von Entity Framework Core 54

    7.9 Funktionen, die dauerhaft entfallen 55

    7.10 Funktionen, die Microsoft noch nachrüsten will 56

    7.11 Neue Funktionen in Entity Framework Core 58

    7.12 Neuerungen in Entity Framework Core 3.x 59

    7.13 Kommende Versionen 59

    7.14 Kritik an der Entwicklungsgeschwindigkeit von Entity Framework Core 60

    7.15 Einsatzszenarien für Entity Framework Core 60

    7.16 Migration von ADO.NET Entity Framework zu Entity Framework Core 61

    7.16.1 Koexistenz 62

    7.16.2 Umstellung 62

    8 Installation von Entity Framework Core 63

    8.1 Nuget-Pakete 63

    8.2 Paketinstallation 64

    8.3 Aktualisierung auf eine neue Version 69

    9 Konzepte von Entity Framework Core 73

    9.1 Vorgehensmodelle bei Entity Framework Core 73

    9.2 Artefakte bei Entity Framework Core 76

    10 Reverse Engineering bestehender Datenbanken 78

    10.1 Reverse Engineering-Werkzeuge 78

    10.2 Vorbereiten des Reverse Engineering mit PowerShell-Befehlen 78

    10.3 Codegenerierung 80

    10.4 Generierter Programmcode 84

    10.5 Beispiel-Client 90

    10.6 .NET Core-Tool 91

    10.7 Schwächen des Reverse Engineering 92

    11 Forward Engineering für neue Datenbanken 94

    11.1 Zwei Klassentypen beim Forward Engineering 94

    11.2 Beispiele in diesem Kapitel 94

    11.3 Regeln für die selbsterstellten Entitätsklassen 95

    11.3.1 Nuget-Pakete 95

    11.3.2 Properties 96

    11.3.3 Datentypen 96

    11.3.4 Nullable 96

    11.3.5 Nullable Reference Types (Nullable Context) 96

    11.3.6 Aufzählungstypen (Enumerationen) 97

    11.3.7 Beziehungen (Master-Detail) 97

    11.3.8 Vererbung 100

    11.3.9 Primärschlüssel 100

    11.3.10 Beispiele 100

    11.4 Regeln für die selbsterstellte Kontextklasse 103

    11.4.1 Nuget-Pakete 103

    11.4.2 Basisklasse 104

    11.4.3 Konstruktor 104

    11.4.4 Verweise zu den Entitätsklassen 104

    11.4.5 Provider und Verbindungszeichenfolge 104

    11.4.6 Beispiel für eine selbsterstellte Kontextklasse 106

    11.4.7 Verwendung von DbContextOptions 106

    11.4.8 Eigenes Datenbankverbindungsamanagement 108

    11.4.9 Flexible Konfiguration der Kontextklasse 108

    11.4.10 Thread-Sicherheit 108

    11.5 Regeln für die Datenbankschemagenerierung 108

    11.6 Beispiel-Client 109

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

    11.8 Das erzeugte Datenmodell 112

    12 Anpassung des Datenbankschemas 115

    12.1 Beispiele in diesem Kapitel 115

    12.2 Konvention versus Konfiguration 115

    12.3 Persistente versus transiente Klassen 116

    12.4 Namen im Datenbankschema 117

    12.4.1 Änderung der Tabellen- und Spaltennamen 117

    12.4.2 Breaking Change in EF Core 3.0 118

    12.5 Reihenfolge der Spalten in einer Tabelle 118

    12.6 Spaltentypen/Datentypen 119

    12.7 Typkonvertierungen 120

    12.8 Pflichtfelder und optionale Felder 121

    12.9 Feldlängen 121

    12.10 Primärschlüssel 121

    12.11 Beziehungen und Fremdschlüssel 122

    12.12 Optionale Beziehungen und Pflichtbeziehungen 123

    12.13 Uni- und Bidirektionale Beziehungen 125

    12.14 1:1-Beziehungen 126

    12.15 Indexe festlegen 127

    12.16 Vererbung 128

    12.16.1 Vererbungsstrategien 128

    12.16.2 TPH und TPCT in Entity Framework Core 130

    12.16.3 Mischung von TPCT und TPH 139

    12.16.4 Konsistenzprobleme bei TPH 140

    12.16.5 Erzwingen von TPH 141

    12.16.6 Konfiguration der Diskriminatorspalte bei TPH 141

    12.17 Syntaxoptionen für das Fluent-API 143

    12.17.1 Sequentielle Konfiguration 143

    12.17.2 Strukturierung durch Statement Lambdas 143

    12.17.3 Strukturierung durch Unterroutinen 144

    12.17.4 Strukturierung durch Konfigurationsklassen 145

    12.18 Massenkonfiguration mit dem Fluent-API 146

    13 Datenbankschemamigrationen 147

    13.1 Anlegen der Datenbank zur Laufzeit 147

    13.2 Schemamigrationen zur Entwicklungszeit 148

    13.3 Befehle für die Schemamigrationen 148

    13.4 ef.exe 149

    13.5 Add-Migration 150

    13.6 Update-Database 154

    13.7 Schemamigrationen bei der Installation 156

    13.8 Remove-Migration 156

    13.9 Script-Migration 156

    13.10 Schemamigrationen zur Laufzeit 157

    13.10.1 Verwendung von Migrate() 157

    13.10.2 IMigrator-Service 158

    13.10.3 Informationen zum Migrationsstand 158

    13.10.4 Praxiseinsatz: Ein Kommandozeilenwerkzeug für die Schemamigration 159

    13.11 Schemamigrationsszenarien 163

    13.11.1 Neue Tabellen und Spalten 163

    13.11.2 Tabellen oder Spalten löschen 165

    13.11.3 Tabellen oder Spalten umbenennen 165

    13.11.4 Spaltendatentyp ändern 165

    13.11.5 NULL-Werte verbieten 166

    13.11.6 Kardinalitäten ändern 167

    13.11.7 Andere Datenbankartefakte anlegen 168

    13.11.8 SQL-Skriptdateien ausführen 170

    13.11.9 Eigenständige Entitäten bilden 171

    13.12 Weitere Möglichkeiten 174

    13.13 Probleme bei der Schemamigration in Verbindung mit TFS 175

    13.14 Startverhalten von Entity Framework Core 175

    14 Daten lesen mit LINQ 176

    14.1 Kontextklasse 176

    14.2 LINQ-Abfragen 176

    14.3 Schrittweises Zusammensetzung von LINQ-Abfragen 179

    14.4 Einsatz von var 180

    14.5 Repository-Pattern 180

    14.6 LINQ-Abfragen mit Paging 184

    14.7 Projektionen 185

    14.7.1 Projektion auf einen Entitätstypen 186

    14.7.2 Projektionen auf einen anonymen Typen 186

    14.7.3 Projektionen auf einen beliebigen Typen 188

    14.8 Abfrage nach Einzelobjekten 189

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

    14.10 Gruppierungen 191

    14.11 Umgehung für das GroupBy-Problem 192

    14.11.1 Mapping auf Nicht-Entitätstypen 193

    14.11.2 Entitätsklasse für die Datenbanksicht anlegen 194

    14.11.3 Einbinden der Entitätsklasse in die Kontextklasse 194

    14.11.4 Verwendung der Pseudo-Entitätsklasse 195

    14.11.5 Herausforderung: Migrationen 195

    14.11.6 Gruppierungen mit Datenbanksichten 197

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

    14.13 Falsche Befehlsreihenfolge 200

    14.14 Eigene Funktionen in LINQ 201

    14.14.1 Eigene Funktionen in LINQ in Entity Framework Core 1.x und 2.x 201

    14.14.2 Eigene Funktionen in LINQ seit Entity Framework Core 3.0 201

    14.15 Kurzübersicht über die LINQ-Syntax 202

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

    14.15.2 Bedingungen (where) 204

    14.15.3 Bedingungen mit Mengen (in) 204

    14.15.4 Sortierungen (orderby) 204

    14.15.5 Paging (Skip() und Take()) 205

    14.15.6 Projektion 205

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

    14.15.8 Gruppierungen (GroupBy) 206

    14.15.9 Einzelobjekte (SingleOrDefault(), FirstOrDefault()) 207

    14.15.10 Verbundene Objekte (Include()) 207

    14.15.11 Inner Join (Join) 208

    14.15.12 Cross Join (Kartesisches Produkt) 209

    14.15.13 Join mit Gruppierung 209

    14.15.14 Unter-Abfragen (Sub-Select) 210

    14.16 Lokaler Objektzwischenspeicher in der Kontextklasse 212

    14.16.1 Wirkung des Zwischenspeichers 212

    14.16.2 Neuladen veralterter Objekte (Reload) 216

    14.16.3 Neuladen gelöschter Objekte 217

    14.16.4 Ein typischer Fehler 219

    14.16.5 Den Zwischenspeicher verwalten 220

    15 Objektbeziehungen und Ladestrategien 222

    15.1 Überblick über die Ladestrategien 222

    15.2 Standardverhalten 222

    15.3 Lazy Loading 224

    15.3.1 Aktivierung des Lazy Loading 224

    15.3.2 Gefahren von Lazy Loading 226

    15.3.3 Lazy Loading ohne Proxyklassen 227

    15.4 Explizites Nachladen (Explicit Loading) 230

    15.5 Eager Loading 232

    15.6 Relationship Fixup 235

    15.6.1 Beispiel für Fall 1 236

    15.6.2 Beispiel für Fall 2 237

    15.6.3 Beispiel für Fall 3 238

    15.7 Preloading mit Relationship Fixup 240

    15.8 Objektbeziehungen und lokaler Zwischenspeicher 244

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

    16.1 Speichern mit SaveChanges() 249

    16.2 Änderungsverfolgung auch für Unterobjekte 251

    16.3 Zusammenfassen von Befehlen (Batching) 252

    16.4 Das Foreach-Problem 253

    16.5 Objekte hinzufügen mit Add() 255

    16.6 Verbundene Objekte anlegen 257

    16.7 Verbundene Objekte ändern / Relationship Fixup 260

    16.8 Widersprüchliche Beziehungen 262

    16.8.1 Objekte löschen mit Remove() 267

    16.8.2 Löschen mit einem Attrappen-Objekt 269

    16.8.3 Massenlöschen 270

    16.9 Datenbanktransaktionen 271

    16.9.1 Transaktion in einer Kontextinstanz 271

    16.9.2 Transaktion über mehrere Kontextinstanzen ohne TransactionScope 272

    16.9.3 Transaktion über mehrere Kontextinstanzen mit TransactionScope 274

    16.10 Change Tracker abfragen 276

    16.10.1 POCOs 276

    16.10.2 Zustand eines Objekts 277

    16.10.3 Liste aller geänderten Objekte 279

    17 Datenänderungskonflikte (Concurrency) 282

    17.1 Rückblick 282

    17.2 Im Standard keine Konflikterkennung 283

    17.3 Optimistisches Sperren / Konflikterkennung 284

    17.4 Konflikterkennung für alle Eigenschaften 285

    17.5 Konflikteinstellung per Konvention 286

    17.6 Fallweise Konflikteinstellung 287

    17.7 Zeitstempel (Timestamp) 287

    17.8 Konflikte auflösen 289

    17.9 Pessimistisches Sperren bei Entity Framework Core 293

    18 Protokollierung (Logging) 297

    18.1 Verwendung der Erweiterungsmethode Log() 297

    18.2 Implementierung der Log()-Erweiterungsmethode 299

    18.3 Protokollierungskategorien 303

    18.4 EnableSensitiveDataLogging 304

    19 Asynchrone Programmierung 305

    19.1 Asynchrone Erweiterungsmethoden 305

    19.2 ToListAsync() 305

    19.3 SaveChangesAsync() 306

    19.4 ForeachAsync() 307

    19.5 Asynchrone Streams mit AsAsyncEnumerable() 308

    20 Dynamische LINQ-Abfragen 310

    20.1 Schrittweises zusammensetzen von LINQ-Abfragen 310

    20.2 Expression Trees 311

    20.3 Dynamic LINQ 314

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

    21.1 Abfragen mit FromSqlRaw() und FromSqlInterpolated() 317

    21.2 Projektionen mit SQL auf Entitätsklassen 320

    21.3 Projektionen auf von Entitätsklassen 320

    21.4 Beliebige Resultsets mit SQL 323

    21.5 Zusammensetzbarkeit von LINQ und SQL 324

    21.6 Stored Procedures und Table Valued Functions 325

    21.7 Erweiterungsmethode ExecuteSqlQuery() 327

    21.8 SQL-DML-Befehle ohne Resultset 328

    22 Weitere Tipps und Tricks zum Mapping 329

    22.1 Shadow Properties 329

    22.1.1 Automatische Shadow Properties 329

    22.1.2 Festlegung eines Shadow Property 330

    22.1.3 Ausgabe aller Shadow Properties einer Entitätsklasse 330

    22.1.4 Lesen und Ändern eines Shadow Property 331

    22.1.5 LINQ-Abfragen mit Shadow Properties 332

    22.1.6 Praxisbeispiel: Automatisches Setzen bei jedem Speichern 332

    22.1.7 Praxisbeispiel: Erweitern der Tabellen zur Betriebszeit der Anwendung 333

    22.2 Berechnete Spalten (Computed Columns) 335

    22.2.1 Automatisches SELECT 336

    22.2.2 Praxistipp: Spalten mit einer Berechnungsformel anlegen 336

    22.2.3 Spalten mit einer Berechnungsformel nutzen 338

    22.2.4 Spalten mit einer Berechnungsformel beim Reverse Engineering 339

    22.3 Standardwerte (Default Values) 339

    22.3.1 Standardwerte beim Forward Engineering festlegen 340

    22.3.2 Standardwerte verwenden 340

    22.3.3 Praxistipp: Standardwerte schon beim Anlegen des Objekts vergeben 342

    22.3.4 Standardwerte beim Reverse Engineering 343

    22.4 Tabellenaufteilung (Table Splitting) mit Owned Types 343

    22.4.1 Owned Types 344

    22.4.2 Weitere Möglichkeiten mit Owned Types 351

    22.4.3 Daten schreiben und lesen mit Owned Types 353

    22.4.4 Einschränkungen bei Owned Types 354

    22.5 Sequenzobjekte (Sequences) 355

    22.5.1 Was sind Sequenzen? 355

    22.5.2 Erstellen von Sequenzen mit T-SQL 356

    22.5.3 Erstellen von Sequenzen beim Forward Engineering 358

    22.5.4 Sequenzen im Einsatz 359

    22.6 Alternative Schlüssel 362

    22.6.1 Alternative Schlüssel definieren 363

    22.6.2 Alternative Schlüssel im Einsatz 365

    22.7 Kaskadierendes Löschen (Cascading Delete) 368

    22.7.1 Löschoptionen in Entity Framework Core 369

    22.7.2 Beispiel 371

    22.8 Abbildung von Datenbanksichten (Views) 376

    22.8.1 Datenbanksicht anlegen 376

    22.8.2 Entitätsklasse für die Datenbanksicht anlegen 377

    22.8.3 Einbinden der Entitätsklasse in die Kontextklasse 377

    22.8.4 Verwendung der Datenbanksicht 378

    22.8.5 Datenbanksichten mit Entity Framework Core 2.1 und 2.2 378

    22.8.6 Datenbanksichten mit Entity Framework Core 1.x und 2.0 379

    22.9 Sichten auf Kontextebene (Defining Queries) 382

    22.9.1 Entitätsklassen für Defining Queries 382

    22.9.2 Registrierung der Entitätsklassen in der Kontextklasse 383

    22.9.3 Abfragedefinition 383

    22.9.4 Verwendung der Defining Queries 384

    22.10 Wertkonvertierungen (Value Converter) 385

    22.10.1 Einschränkungen 386

    22.10.2 Beispiel 1: Konvertierung zwischen String und Boolean 386

    22.10.3 Beispiel 2: Konvertierung zwischen Aufzählungstyp und String 390

    22.11 Datenbefüllung bei der Schemamigration (Data Seeding) 393

    22.11.1 Herausforderung Shadow Properties 396

    22.11.2 Bug bei berechneten Spalten 398

    23 Weitere Tipps und Tricks zu LINQ und SQL 400

    23.1 Globale Abfragefilter (ab Version 2.0) 400

    23.1.1 Filter definieren 400

    23.1.2 Filter nutzen 400

    23.1.3 Praxistipp: Filter ignorieren 401

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

    23.1.5 Globale Abfragefilter bei Stored Procedures und Table Valued Functions 402

    23.2 Zukünftige Abfragen (Future Queries) 402

    23.2.1 Konzept der Future Queries 402

    23.2.2 Future() 403

    23.2.3 FutureValue() 404

    23.2.4 Bug in Verbindung mit EF Profiler 405

    23.3 Befehlsverfolgung mit Query Tags (ab Version 2.2) 406

    23.3.1 TagWith() 406

    23.3.2 Einsatz von TagWith() 406

    23.3.3 Einschränkungen 413

    23.4 Benachrichtigungen bei Datenänderungen (Query Notifications) 413

    23.4.1 SqlDependency für Microsoft SQL Server 413

    23.4.2 Aufbau des SQL-Befehls 414

    23.4.3 Query Notification in einer Konsolenanwendungen 415

    23.4.4 Diagnosemöglichkeiten 417

    23.4.5 Query Notification in einer Desktop-Anwendungen 417

    24 Leistungsoptimierung (Performance Tuning) 424

    24.1 Vorgehensmodell zur Leistungsoptimierung bei Entity Framework Core 424

    24.2 Best Practices für Ihre eigenen Leistungstests 424

    24.3 Leistungsvergleich verschiedener Datenzugriffstechniken in .NET 425

    24.4 Objektzuweisung optimieren 426

    24.5 Massenoperationen 429

    24.5.1 Einzellöschen 429

    24.5.2 Optimierung durch Batching 429

    24.5.3 Löschen ohne Laden mit Pseudo-Objekten 431

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

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

    24.5.6 Massenaktualisierung mit EFPlus 436

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

    24.6 Leistungsoptimierung durch No-Tracking 437

    24.6.1 No-Tracking aktivieren 437

    24.6.2 No-Tracking fast immer möglich 438

    24.6.3 No-Tracking im änderbaren Datagrid 441

    24.6.4 QueryTrackingBehavior und AsTracking() 452

    24.6.5 Konsequenzen des No-Tracking-Modus 453

    24.6.6 Best Practices 453

    24.7 Leistungsoptimierung durch Compiled Queries 454

    24.7.1 Konzept einer Compiled Query 454

    24.7.2 Compiled Queries in Entity Framework Core 455

    24.7.3 Leistungstest 455

    24.7.4 Einschränkungen 459

    24.8 Auswahl der besten Ladestrategie 460

    24.9 Zwischenspeicherung (Caching) 460

    24.9.1 MemoryCache 461

    24.9.2 CacheManager 463

    24.10 Second-Level-Caching mit EFPlus 470

    24.10.1 Einrichten des Second-Level-Cache 471

    24.10.2 Verwenden des Second-Level-Cache 471

    25 Softwarearchitektur mit Entity Framework Core 474

    25.1 Monolithisches Modell 474

    25.2 Entity Framework Core als Datenzugriffsschicht 475

    25.3 Reine Geschäftslogik 476

    25.4 Geschäftsobjekt- und ViewModel-Klassen 477

    25.5 Verteilte Systeme 478

    25.6 Fazit 481

    26 Zusatzwerkzeuge 482

    26.1 Entity Framework Core Power Tools 482

    26.1.1 Funktionsüberblick 482

    26.1.2 Reverse Engineering mit Entity Framework Core Power Tools 483

    26.1.3 Schemamigrationen mit Entity Framework Core Power Tools 488

    26.1.4 Diagramme mit Entity Framework Core Power Tools 490

    26.2 LINQPad 491

    26.2.1 Aufbau von LINQPad 492

    26.2.2 Datenquellen einbinden 492

    26.2.3 LINQ-Befehle ausführen 496

    26.2.4 Abspeichern 498

    26.2.5 Weitere LINQPad-Treiber 498

    26.2.6 Interaktive Programmcodeeingabe 499

    26.2.7 Fazit zu LINQPad 500

    26.3 Entity Developer 500

    26.3.1 Auswahl der ORM-Technik 501

    26.3.2 Reverse Engineering mit Entity Developer 503

    26.3.3 Forward Engineering mit Entity Developer 512

    26.4 Entity Framework Profiler 517

    26.4.1 Einbinden des Entity Framework Profilers 519

    26.4.2 Befehle überwachen mit Entity Framework Profiler 519

    26.4.3 Warnungen vor potenziellen Problemen 522

    26.4.4 Analysefunktionen 523

    26.4.5 Kommandozeilenunterstützung und API 524

    26.4.6 Fazit zu Entity Framework Profiler 524

    27 Zusatzkomponenten 525

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

    27.1.1 Unterstützte Oracle-Versionen 525

    27.1.2 Installation 525

    27.1.3 Visual Studio-Integration 527

    27.1.4 Datenbanktreibername 530

    27.1.5 Entity Framework Core-Werkzeuge 530

    27.1.6 Kontextklasse 531

    27.1.7 Entitätsklassen 531

    27.1.8 Datentypen 531

    27.2 Entity Framework Plus (EFPlus) 533

    27.3 Second-Level-Caching mit EFSecondLevelCache.Core 534

    27.4 Objekt-Objekt-Mapping mit AutoMapper 534

    27.4.1 Objekt-Objekt-Mapping per Reflection 536

    27.4.2 AutoMapper 538

    27.4.3 Beispielszenario 539

    27.4.4 Abbildungen konfigurieren 541

    27.4.5 Abbildung ausführen mit Map() 541

    27.4.6 Nicht-statisches API 542

    27.4.7 Abbildungskonventionen 542

    27.4.8 Abbildungskonventionen ändern 544

    27.4.9 Profilklassen 544

    27.4.10 Verbundene Objekte 545

    27.4.11 Manuelle Abbildungen 545

    27.4.12 Typkonvertierungen 548

    27.4.13 Objektmengen 549

    27.4.14 Vererbung 550

    27.4.15 Generische Klassen 553

    27.4.16 Zusatzaktionen vor und nach dem Mapping 555

    27.4.17 Geschwindigkeit 557

    27.4.18 Fazit zu AutoMapper 558

    27.5 Andere Erweiterungen 558

    28 Praxislösungen 560

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

    28.1.1 Das Fallbeispiel "MiracleList" 560

    28.1.2 Architektur 564

    28.1.3 Entitätsklassen 568

    28.1.4 Entity Framework Core-Kontextklasse 570

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

    28.1.6 Geschäftslogik 574

    28.1.7 WebAPI 583

    28.1.8 Verwendung von Entity Framework Core per Dependency Injection 593

    28.1.9 Praxistipp: Kontextinstanzpooling (DbContext Pooling) 596

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

    28.2.1 Unit Tests und Integrationstests mit Entity Framework Core 597

    28.2.2 In-Memory-Treiber 597

    28.2.3 SQLite- In-Memory-Treiber 600

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

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

    28.3 Entity Framework Core in einer Universal Windows Platform App 607

    28.3.1 Das Fallbeispiel "MiracleList Light" 607

    28.3.2 Architektur 608

    28.3.3 Entitätsklassen 609

    28.3.4 Entity Framework Core-Kontextklasse 611

    28.3.5 Startcode 611

    28.3.6 Erzeugte Datenbank 612

    28.3.7 Datenzugriffscode 614

    28.3.8 Benutzeroberfläche 618

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

    28.4.1 Das Fallbeispiel "MiracleList Light" 619

    28.4.2 Architektur 621

    28.4.3 Entitätsklassen 623

    28.4.4 Entity Framework Core-Kontextklasse 624

    28.4.5 Startcode 625

    28.4.6 Erzeugte Datenbank 626

    28.4.7 Datenzugriffscode 626

    28.4.8 Benutzeroberfläche 629

    28.5 N:M-Beziehungen zu sich selbst 631

    29 Quellen im Internet 638

    30 Stichwortverzeichnis (Index) 639

    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