Moderne Datenzugriffslösungen mit Entity Framework Core 2.1/2.2 (E-Book (PDF) und Programmcodebeispiele)
Moderne Datenzugriffslösungen mit Entity Framework Core 2.1/2.2
Datenbankprogrammierung mit C# in .NET/.NET Core/Xamarin
Über das Buch
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.
Pakete
Nur das E-Book (PDF)
Nur das E-Book ohne Programmcodebeispiele
PDF
Deutsch
E-Book (PDF) und Programmcodebeispiele
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.
PDF
Deutsch
Dieses Buch ist Teil folgender Pakete:
Inhaltsverzeichnis
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
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