Moderne Datenzugriffslösungen mit Entity Framework Core 3.0 (E-Book (PDF) und Programmcodebeispiele (ZIP))
Moderne Datenzugriffslösungen mit Entity Framework Core 3.0
Datenbankprogrammierung mit C# in .NET Core
Über das Buch
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.
Pakete
Nur das E-Book (PDF)
PDF
Deutsch
E-Book (PDF) und Programmcodebeispiele (ZIP)
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.
PDF
Deutsch
Inhaltsverzeichnis
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
Andere Bücher dieses Autors
Die bedingungslose Leanpub Garantie: Kein Risiko, 100% Zufriedenheit
Innerhalb von 60 Tagen ab Kauf kannst du dein Geld zu 100% zurückverlangen, bei jedem Leanpub-Kauf, in nur zwei Klicks. Wir bearbeiten die Erstattungen manuell, daher dauert es ein paar Tage, bis der Betrag ankommt.
Lese die kompletten Bedingungen.
Verdienen Sie $8 bei einem Kauf von $10 und $16 bei einem Kauf von $20
Wir zahlen 80% Tantiemen bei Käufen von $7,99 oder mehr und 80% Tantiemen abzüglich einer Pauschalgebühr von 50 Cent bei Käufen zwischen $0,99 und $7,98. Sie verdienen $8 bei einem Verkauf von $10 und $16 bei einem Verkauf von $20. Wenn wir also 5000 nicht zurückgegebene Exemplare Ihres Buches für $20 verkaufen, verdienen Sie $80,000.
(Ja, einige Autoren haben auf Leanpub bereits viel mehr verdient.)
Tatsächlich haben Autoren durch das Schreiben, Veröffentlichen und Verkaufen auf Leanpubüber 13 Millionen Dollar verdient.
Erfahren Sie mehr über das Schreiben auf Leanpub
Kostenlose Updates. Ohne DRM.
Mit dem Kauf auf Leanpub bekommst Du kostenlose Updates solange der Autor Änderungen vornimmt! Viele Autoren veröffentlichen ihre Bücher während des Schreibens. Alle Leser bekommen dann kostenlose Updates, egal wann sie das Buch gekauft haben oder wie viel sie bezahlt haben (auch wenn es kostenlos war).
Die meisten Leanpub Bücher sind erhältlich als PDF (für Computer) oder EPUB (für Handy, Tablet, Kindle). Die verfügbaren Formate sind oben rechts auf dieser Seite angezeigt.
Leanpub Bücher kommen ohne DRM Kopierschutz Firlefanz, sodass Du sie problemlos auf jedem unterstützten Gerät lesen kannst.
Erfahren Sie mehr über Leanpubs E-Book-Formate und wo Sie sie lesen können