Moderne Datenzugriffslösungen mit Entity Framework Core 5.0 (Nur das E-Book (PDF))
$44.99
Minimal-Preis
$49.99
Empfohlener Preis

Moderne Datenzugriffslösungen mit Entity Framework Core 5.0

Datenbankprogrammierung / Objekt-Relationales Mapping mit C# in .NET und .NET Core

Über das Buch

Entity Framework Core 5.0 ist der neuste Objekt-Relationale Mapper und die aktuelle Datenzugriffstechnik von Microsoft für .NET- und .NET Core-basierte Desktop-, Web- und Konsolen-Anwendungen sowie mobile Apps mit Xamarin. 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 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.

Über den Autor

Dr. Holger Schwichtenberg
Dr. Holger Schwichtenberg

Dr. Holger Schwichtenberg ist Chief Technology Expert bei der MAXIMAGO GmbH, die Innovations- und Experience-getriebene Software-Entwicklung, u.a. in hochkritischen sicherheitstechnischen Bereichen, anbietet. Zudem ist er Leiter des Expertennetzwerks www.IT-Visions.de, das zahlreiche mittlere und große Unternehmen durch Beratung und Schulung bei der Entwicklung sowie dem Betrieb von Software unterstützt.

Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 70 Fachbücher für O'Reilly, APress, Addison-Wesley, Microsoft Press und den Carl Hanser-Verlag gehört er zu den bekanntesten Experten für .NET und Webtechniken in Deutschland. Darüber hinaus ist er ständiger Mitarbeiter der Fachzeitschriften windows developer, dotnetpro und iX sowie bei heise.de. Er hat in seiner Karriere bereits über 1000 Fachartikel veröffentlicht.

Durch seine Vermittlungskompetenz hat er sich den Spitznamen "DOTNET-DOKTOR" verdient. Von Microsoft wird er für sein .NET-Fachwissen seit nunmehr 17 Jahren ausgezeichnet als Microsoft Most Valuable Professional (MVP) für .NET/Visual Studio.

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

Bundles that include this book

3 Books
$124.97
Suggested Price
$99.00
Paket Preis

Table of Contents

1 Inhaltsverzeichnis 4 2 Vorwort 20 3 Über den Autor 22 4 Über dieses Buch 23 4.1 Versionsgeschichte dieses Buchs 23 4.2 Bezugsquelle für Aktualisierungen 31 4.3 Geplante Kapitel 31 4.4 Programmiersprache in diesem Buch 32 5 Fallbeispiele in diesem Buch 34 5.1 Entitäten 34 5.2 Englische Version des Beispiels 37 5.3 Anwendungsarten in diesem Buch 39 5.4 Hilfsroutinen zur Konsolenausgabe 39 6 Programmcodebeispiel zum Download 45 6.1 Webadresse für Downloads 45 6.2 Übersicht über die Beispiele 45 6.3 Technischer Hinweis zu den Beispielen 47 6.4 Qualitätssicherung der Programmcodebeispiele 47 7 Entity Framework Core-Basisinformationen 48 7.1 Was ist ein Objekt-Relationaler Mapper (ORM)? 48 7.2 ORM in der .NET-Welt 49 7.3 Versionsgeschichte von Entity Framework Core 50 7.4 Unterstützte Betriebssysteme 54 7.5 Unterstützte .NET-Versionen 54 7.6 Unterstützte Visual Studio-Versionen 56 7.7 Unterstützte Datenbanken 57 7.8 NuGet-Pakete 58 7.9 Kommandozeilenwerkzeuge 59 7.9.1 PowerShell-Commandlets und ef.exe 59 7.9.2 .NET CLI-Erweiterung 60 7.10 Funktionsumfang von Entity Framework Core 60 7.11 Funktionen, die dauerhaft entfallen 61 7.12 Funktionen, die Microsoft noch nachrüsten will (oder bereits hat) 62 7.13 Neue Funktionen in Entity Framework Core 63 7.14 Vergleich zwischen Entity Framework 6.4 und Entity Framework Core 5.0 64 7.15 Verbliebene Schwächen in Entity Framework Core 69 7.16 Neuerungen in Entity Framework Core 3.0 70 7.16.1 Viele Breaking Changes 70 7.16.2 Neue LINQ-to-SQL-Übersetzung 71 7.16.3 Vorbereitung für kommende Versionen 72 7.16.4 Tatsächliche Neuerungen in Entity Framework Core 3.0 72 7.17 Neuerungen in Entity Framework Core 3.1 72 7.18 Neuerungen in Entity Framework Core 5.0 74 7.18.1 Namensgebung 74 7.18.2 Verfügbare Versionen 74 7.18.3 Zeitplan 74 7.18.4 Plattformen 74 7.18.5 Neuerungen 74 7.19 Kritik an der Entwicklungsgeschwindigkeit von Entity Framework Core 77 7.20 Einsatzszenarien für Entity Framework Core 77 7.21 Dokumentation für Entity Framework Core 78 7.22 Support für Entity Framework Core 79 8 Installation von Entity Framework Core 81 8.1 NuGet-Pakete 81 8.2 Paketinstallation 82 8.3 Aktualisierung auf eine neue Version 86 9 Konzepte von Entity Framework Core 91 9.1 Vorgehensmodelle bei Entity Framework Core 91 9.2 Artefakte bei Entity Framework Core 94 10 Reverse Engineering bestehender Datenbanken 96 10.1 Reverse Engineering-Werkzeuge 96 10.2 NuGet-Pakete für das Reverse Engineering 96 10.3 Projektstruktur für das Reverse Engineering 97 10.4 Codegenerierung starten 98 10.5 Neuerungen in Entity Framework Core 5.0 99 10.6 Beispieldatenbank 99 10.7 Generierter Programmcode 101 10.8 Namensänderungen 111 10.9 Beispiel-Client 112 10.10 Einschränkung der Tabellen beim Reverse Engineering 113 10.11 Trennung von Kontextklasse und Entitätsklassen 114 10.12 Konfiguration der Datenbankverbindung 114 10.12.1 Verwenden von Konfigurationsdateien in .NET Framework 115 10.12.2 Verwenden von Konfigurationsdateien in .NET Core 116 10.12.3 Übergabe der Verbindungszeichenfolge 116 10.12.4 Verwendung von DbContextOptions 117 10.12.5 Eigenes Datenbankverbindungsmanagement 118 10.12.6 Flexible Konfiguration der Kontextklasse 118 10.13 Thread-Sicherheit 119 10.14 EF Core-Kommandozeilenwerkzeug (dotnet ef) 119 10.15 Schwächen des Reverse Engineering 120 11 Forward Engineering für neue Datenbanken 122 11.1 Zwei Klassentypen beim Forward Engineering 122 11.2 Beispiele in diesem Kapitel 122 11.3 Regeln für die selbsterstellten Entitätsklassen 123 11.3.1 NuGet-Pakete 123 11.3.2 Properties 123 11.3.3 Datentypen 124 11.3.4 Null-Werte erlauben (Nullable/Nullability) 124 11.3.5 Non-Nullable Reference Types (Nullable Context) 124 11.3.6 Aufzählungstypen (Enumerationen) 133 11.3.7 Beziehungen (Master-Detail) 133 11.3.8 Vererbung 136 11.3.9 Primärschlüssel 136 11.3.10 Beispiele 137 11.4 Regeln für die selbsterstellte Kontextklasse 139 11.4.1 NuGet-Pakete 140 11.4.2 Basisklasse 140 11.4.3 Konstruktor 140 11.4.4 Verweise zu den Entitätsklassen 141 11.4.5 Provider und Verbindungszeichenfolge 141 11.4.6 Beispiel für eine selbsterstellte Kontextklasse 141 11.5 Regeln für die Datenbankschemagenerierung 142 11.6 Beispiel-Client 142 11.7 Anpassung per Fluent-API (OnModelCreating()) 143 11.8 Das erzeugte Datenmodell 146 12 Anpassung des Datenbankschemas 148 12.1 Beispiele in diesem Kapitel 148 12.2 Konvention versus Konfiguration 148 12.3 Persistente versus transiente Klassen 149 12.4 Namen im Datenbankschema 150 12.4.1 Änderung der Tabellen- und Spaltennamen 150 12.4.2 Breaking Change in EF Core 3.0 151 12.5 Reihenfolge der Spalten in einer Tabelle 151 12.6 Sortierreihenfolge der Werte 152 12.7 Spaltentypen/Datentypen 152 12.8 Typkonvertierungen 154 12.9 Pflichtfelder und optionale Felder 154 12.10 Feldlängen 154 12.11 Primärschlüssel 154 12.12 Beziehungen und Fremdschlüssel 155 12.13 Optionale Beziehungen und Pflichtbeziehungen 156 12.14 Uni- und Bidirektionale Beziehungen 157 12.15 1:1-Beziehungen 158 12.16 N:M-Beziehungen 159 12.16.1 N:M Skip Navigation 160 12.16.2 Direkter Zugriff auf die Zwischentabelle 165 12.16.3 Namen der Zwischentabelle ändern 166 12.16.4 Explizite Klasse für die Zwischentabelle 166 12.17 Indexe festlegen 169 12.17.1 Verwendung von HasIndex() 169 12.17.2 Annotation [Index] 170 12.18 Vererbung 171 12.18.1 Vererbungsstrategien 172 12.18.2 TPH und TPCT in Entity Framework Core 173 12.18.3 Mischung von TPCT und TPH 180 12.18.4 Konsistenzprobleme bei TPH 181 12.18.5 Erzwingen von TPH 182 12.18.6 Konfiguration der Diskriminatorspalte bei TPH 182 12.18.7 Erzwingen von TPT 184 12.19 Syntaxoptionen für das Fluent-API 185 12.19.1 Sequentielle Konfiguration 185 12.19.2 Strukturierung durch Statement Lambdas 186 12.19.3 Strukturierung durch Unterroutinen 186 12.19.4 Strukturierung durch Konfigurationsklassen 187 13 Datenbankschemamigrationen 188 13.1 Informationen über die Datenbank 188 13.2 Prüfung der Datenbankexistenz 188 13.3 Anlegen der Datenbank zur Laufzeit 189 13.4 Schemamigrationen zur Entwicklungszeit 190 13.5 Befehle für die Schemamigrationen 190 13.6 Add-Migration 192 13.7 Get-Migration 195 13.8 Update-Database 195 13.9 Schemamigrationen bei der Installation 197 13.10 Remove-Migration 197 13.11 Script-Migration 198 13.12 Schemamigrationen zur Laufzeit 198 13.12.1 Verwendung von Migrate() 198 13.12.2 IMigrator-Service 199 13.12.3 Informationen zum Migrationsstand 199 13.12.4 Praxiseinsatz: Ein Kommandozeilenwerkzeug für die Schemamigration 200 13.12.5 Neue Tabellen und Spalten 203 13.13 Schemamigrationsszenarien 205 13.13.1 Tabellen oder Spalten löschen 205 13.13.2 Tabellen oder Spalten umbenennen 205 13.13.3 Spaltendatentyp ändern 205 13.13.4 NULL-Werte verbieten 206 13.13.5 Kardinalitäten ändern 207 13.13.6 Andere Datenbankartefakte anlegen 208 13.13.7 SQL-Skriptdateien ausführen 210 13.13.8 Eigenständige Entitäten bilden 211 13.14 Weitere Möglichkeiten 213 13.15 Probleme bei der Schemamigration in Verbindung mit TFS 214 13.16 Startverhalten von Entity Framework Core 214 14 Daten lesen mit LINQ 215 14.1 Kontextklasse 215 14.2 LINQ-Abfragen 215 14.3 Schrittweise Zusammensetzung von LINQ-Abfragen 217 14.4 Einsatz von var 218 14.5 Repository-Pattern 218 14.6 LINQ-Abfragen mit Paging 221 14.7 Projektionen 223 14.7.1 Projektion auf einen Entitätstypen 223 14.7.2 Projektionen auf einen anonymen Typen 224 14.7.3 Projektionen auf einen beliebigen Typen 225 14.8 Abfrage nach Einzelobjekten 226 14.9 Laden anhand des Primärschlüssels mit Find() 227 14.10 Gruppierungen mit GroupBy() 228 14.10.1 Gruppierungen seit Entity Framework Core 3.0 228 14.10.2 Umgehung für das GroupBy-Problemin Entity Framework Core 1.x/2.x 229 14.11 LINQ im RAM statt in der Datenbank (Client-Evaluation) 234 14.12 Falsche Befehlsreihenfolge 236 14.13 Eigene Funktionen in LINQ 237 14.13.1 Eigene Funktionen in LINQ in Entity Framework Core 1.x und 2.x 237 14.13.2 Eigene Funktionen in LINQ seit Entity Framework Core 3.0 237 14.14 Kurzübersicht über die LINQ-Syntax 238 14.14.1 Einfache SELECT-Befehle (Alle Datensätze) 239 14.14.2 Bedingungen (where) 240 14.14.3 Bedingungen mit Mengen (in) 240 14.14.4 Sortierungen (orderby) 240 14.14.5 Paging (Skip() und Take()) 241 14.14.6 Projektion 241 14.14.7 Aggregatfunktionen (Count(), Min(), Max(), Average(), Sum()) 241 14.14.8 Gruppierungen (GroupBy) 242 14.14.9 Einzelobjekte (SingleOrDefault(), FirstOrDefault()) 242 14.14.10 Verbundene Objekte (Include()) 243 14.14.11 Inner Join (Join) 244 14.14.12 Cross Join (Kartesisches Produkt) 244 14.14.13 Join mit Gruppierung 245 14.14.14 Unter-Abfragen (Sub-Select) 245 14.15 Lokaler Objektzwischenspeicher in der Kontextklasse (First Level Cache) 247 14.15.1 Wirkung des Zwischenspeichers 248 14.15.2 Neuladen veralterter Objekte (Reload) 251 14.15.3 Neuladen gelöschter Objekte 252 14.15.4 Ein typischer Fehler bei Unit Tests 254 14.15.5 Den Zwischenspeicher verwalten 256 14.16 Kontextreset 257 14.17 Datenbindung 258 15 Objektbeziehungen und Ladestrategien 259 15.1 Überblick über die Ladestrategien 259 15.2 Standardverhalten 259 15.3 Lazy Loading 261 15.3.1 Aktivierung des Lazy Loading 261 15.3.2 Gefahren von Lazy Loading 262 15.3.3 Lazy Loading ohne Proxyklassen 264 15.4 Explizites Nachladen (Explicit Loading) 266 15.5 Eager Loading 268 15.5.1 Include() und ThenInclude() 268 15.5.2 Anzahl der SQL-Befehle 270 15.6 Eager Loading mit Bedingungen (Filtered Includes) 273 15.7 Relationship Fixup 274 15.7.1 Beispiel für Fall 1 275 15.7.2 Beispiel für Fall 2 276 15.7.3 Beispiel für Fall 3 277 15.8 Preloading mit Relationship Fixup (Client-Join) 278 15.9 Objektbeziehungen und lokaler Zwischenspeicher 282 16 Einfügen, Löschen und Ändern 286 16.1 Speichern mit SaveChanges() 286 16.1.1 Verhalten von SaveChanges() 286 16.1.2 Beispiel 287 16.1.3 Objektzustandsänderungen 288 16.2 Fehlerfälle beim Speichern 288 16.3 Änderungsverfolgung auch für Unterobjekte 290 16.4 Zusammenfassen von Befehlen (Batching) 291 16.5 Ereignisse beim Speichern 291 16.6 Das Foreach-Problem 293 16.7 Objekte hinzufügen mit Add() 294 16.8 Objekte verbinden 296 16.9 Verbundene Objekte ändern / Relationship Fixup 299 16.10 Widersprüchliche Beziehungen 301 16.10.1 Objekte löschen mit Remove() 305 16.10.2 Löschen mit einem Attrappen-Objekt 307 16.10.3 Massenlöschen 308 16.11 Objekte löschen 309 16.12 Datenbanktransaktionen 311 16.12.1 Transaktion in einer Kontextinstanz 311 16.12.2 Transaktion über mehrere Kontextinstanzen ohne TransactionScope 312 16.12.3 Transaktion über mehrere Kontextinstanzen mit TransactionScope 314 16.13 Change Tracker abfragen 316 16.13.1 POCOs 316 16.13.2 Zustand eines Objekts 316 16.13.3 Liste aller geänderten Objekte 318 17 Datenänderungskonflikte (Concurrency) 321 17.1 Rückblick 321 17.2 Im Standard keine Konflikterkennung 321 17.3 Optimistisches Sperren 323 17.4 Konflikterkennung durch Wertvergleich 323 17.5 Konflikterkennung für alle Spalten 324 17.6 Konflikteinstellung per Konvention 325 17.7 Fallweise Konflikteinstellung 326 17.8 Zeitstempel (Timestamp) 326 17.9 Konflikte auflösen 329 17.10 Pessimistisches Sperren bei Entity Framework Core 332 18 Protokollierung (Logging) 335 18.1 Protokollierung mit UseLoggerFactory() 335 18.2 Filtern nach Level und Protokollkategorien 337 18.3 Übergabe der LoggerFactory 338 18.4 Ereignis-IDs 339 18.5 Erweiterungsmethode Log() 340 18.6 Implementierung der Log()-Erweiterungsmethode 342 18.7 Protokollierung mit LogTo() 347 18.8 EnableSensitiveDataLogging und EnableDetailedErrors 347 18.9 SQL-Ausgabe mit ToQueryString() 348 18.10 Debugger-Ansichten (DebugView) 348 19 Asynchrone Programmierung 350 19.1 Asynchrone Erweiterungsmethoden 350 19.2 ToListAsync() 350 19.3 SaveChangesAsync() 351 19.4 ForeachAsync() 352 19.5 Asynchrone Streams mit AsAsyncEnumerable() 353 20 Dynamische LINQ-Abfragen 355 20.1 Schrittweises zusammensetzen von LINQ-Abfragen 355 20.2 Expression Trees 356 20.3 Dynamic LINQ 359 21 Daten lesen und ändern mit SQL, Stored Procedures und Table Valued Functions 361 21.1 Abfragen mit FromSqlRaw() und FromSqlInterpolated() 361 21.2 Projektionen mit SQL auf Entitätsklassen 363 21.3 Beliebige Resultsets mit SQL 366 21.3.1 Systeminformationen des Microsoft SQL Server 366 21.3.2 Liste aller Tabellen einer Datenbank 367 21.4 Zusammensetzbarkeit von LINQ und SQL 367 21.5 Stored Procedures und Table Valued Functions 369 21.5.1 Stored Procedures mit FromSqlRaw() 369 21.5.2 Table Value Functions mit FromSqlRaw() 370 21.5.3 Wrapper-Methoden für Table Valued Functions 370 21.5.4 Codegenerierung für Stored Procedures und Table Valued Functions 371 21.6 Erweiterungsmethode ExecuteSqlQuery() 371 21.7 SQL-DML-Befehle ohne Resultset 372 22 Weitere Tipps und Tricks zum Mapping 373 22.1 Mapping auf Properties oder Fields 373 22.1.1 Beispielszenario 373 22.1.2 Mapping von Fields und privaten Properties 376 22.1.3 Fields bevorzugt beim Materialisieren 377 22.1.4 Abweichungen von den Konventionen 379 22.1.5 Zugriff auf Property erzwingen 380 22.1.6 Verwendung von privaten Mitgliedern in LINQ-Abfragen 381 22.2 Shadow Properties 381 22.2.1 Automatische Shadow Properties 382 22.2.2 Festlegung eines Shadow Property 382 22.2.3 Ausgabe aller Shadow Properties einer Entitätsklasse 383 22.2.4 Lesen und Ändern eines Shadow Property 383 22.2.5 LINQ-Abfragen mit Shadow Properties 384 22.2.6 Praxisbeispiel: Automatisches Setzen bei jedem Speichern 384 22.2.7 Praxisbeispiel: Erweitern der Tabellen zur Betriebszeit der Anwendung 385 22.3 Indexer Properties 387 22.3.1 Indexer Properties zur Erweiterung von Entitätsklassen 387 22.3.2 Indexer Properties für dynamische Entitätsklassen 388 22.3.3 Beispiel für den Einsatz von Indexer Properties 389 22.4 Berechnete Spalten (Computed Columns) 393 22.4.1 Automatisches SELECT 393 22.4.2 Praxistipp: Spalten mit einer Berechnungsformel anlegen 394 22.4.3 Spalten mit einer Berechnungsformel nutzen 395 22.4.4 Spalten mit einer Berechnungsformel beim Reverse Engineering 396 22.5 Standardwerte (Default Values) 397 22.5.1 Standardwerte beim Forward Engineering festlegen 397 22.5.2 Standardwerte verwenden 398 22.5.3 Praxistipp: Standardwerte schon beim Anlegen des Objekts vergeben 399 22.5.4 Standardwerte beim Reverse Engineering 400 22.6 Tabellenaufteilung (Table Splitting) mit Owned Types 400 22.6.1 Owned Types 401 22.6.2 Weitere Möglichkeiten mit Owned Types 407 22.6.3 Daten schreiben und lesen mit Owned Types 408 22.6.4 Einschränkungen bei Owned Types 410 22.7 Sequenzobjekte (Sequences) 411 22.7.1 Was sind Sequenzen? 411 22.7.2 Erstellen von Sequenzen mit T-SQL 411 22.7.3 Erstellen von Sequenzen beim Forward Engineering 413 22.7.4 Sequenzen im Einsatz 414 22.8 Alternative Schlüssel 417 22.8.1 Alternative Schlüssel definieren 418 22.8.2 Alternative Schlüssel im Einsatz 419 22.9 Kaskadierendes Löschen (Cascading Delete) 423 22.9.1 Löschoptionen in Entity Framework Core 423 22.9.2 Beispiel 425 22.10 Abbildung von Datenbanksichten (Views) 429 22.10.1 Datenbanksicht anlegen 430 22.10.2 Entitätsklasse für die Datenbanksicht anlegen 430 22.10.3 Einbinden der Entitätsklasse in die Kontextklasse 430 22.10.4 Verwendung der Datenbanksicht 431 22.10.5 Änderungen persistieren in Datenbanksichten 432 22.10.6 Datenbanksichten mit Entity Framework Core 2.1 und 2.2 432 22.10.7 Datenbanksichten mit Entity Framework Core 1.x und 2.0 433 22.11 Sichten auf Kontextebene (Defining Queries) 435 22.11.1 Entitätsklassen für Defining Queries 435 22.11.2 Registrierung der Entitätsklassen in der Kontextklasse 436 22.11.3 Abfragedefinition 436 22.11.4 Verwendung der Defining Queries 437 22.11.5 Alternativen zu Defining Queries 438 22.12 Wertkonvertierungen (Value Converter) 440 22.12.1 Einschränkungen 441 22.12.2 Beispiel 1: Konvertierung zwischen String und Boolean 441 22.12.3 Beispiel 2: Konvertierung zwischen Aufzählungstyp und String 443 22.13 Datenbefüllung bei der Schemamigration (Data Seeding) 447 22.13.1 Herausforderung Shadow Properties 449 22.13.2 Bug bei berechneten Spalten 450 22.14 Eigene Konventionen (Custom Conventions) 452 22.14.1 Eigene Konventionen per Massenkonfiguration mit dem Fluent-API 452 22.14.2 Eigene Konventionen per IConvention 458 22.15 Wechsel von Reverse Engineering auf Forward Engineering 468 23 Weitere Tipps und Tricks zu LINQ und SQL 470 23.1 Globale Abfragefilter (ab Version 2.0) 470 23.1.1 Filter definieren 470 23.1.2 Filter nutzen 470 23.1.3 Praxistipp: Filter ignorieren 471 23.1.4 Globale Abfragefilter bei SQL-Abfragen (ab Version 2.0) 471 23.1.5 Globale Abfragefilter bei Stored Procedures und Table Valued Functions 471 23.2 Skalare Datenbankfunktionen 472 23.3 Zukünftige Abfragen (Future Queries) 478 23.3.1 Konzept der Future Queries 478 23.3.2 Future() 478 23.3.3 FutureValue() 480 23.3.4 Bug in Verbindung mit EF Profiler 481 23.4 Befehlsverfolgung mit Query Tags (ab Version 2.2) 482 23.4.1 TagWith() 482 23.4.2 Einsatz von TagWith() 482 23.4.3 Einschränkungen 488 23.5 Benachrichtigungen bei Datenänderungen (Query Notifications) 488 23.5.1 SqlDependency für Microsoft SQL Server 488 23.5.2 Aufbau des SQL-Befehls 489 23.5.3 Query Notification in einer Konsolenanwendungen 490 23.5.4 Diagnosemöglichkeiten 492 23.5.5 Query Notification in einer Desktop-Anwendungen 492 24 Leistungsoptimierung (Performance Tuning) 498 24.1 Vorgehensmodell zur Leistungsoptimierung bei Entity Framework Core 498 24.2 Best Practices für Ihre eigenen Leistungstests 498 24.3 Leistungsvergleich verschiedener Datenzugriffstechniken in .NET 499 24.4 Allgemeine Prinzipien für den Datenbankzugriff 500 24.5 Kontextinstanziierung optimieren 500 24.6 Objektzuweisungen optimieren 500 24.7 Massenoperationen 502 24.7.1 Einzellöschen 503 24.7.2 Optimierung durch Batching 503 24.7.3 Löschen ohne Laden mit Pseudo-Objekten 504 24.7.4 Einsatz von klassischem SQL anstelle des Entity Framework Core-APIs 505 24.7.5 Lamdba-Ausdrücke für Massenlöschen mit EFPlus 507 24.7.6 Massenaktualisierung mit EFPlus 509 24.7.7 Optionen für Update() und Delete() bei EFPlus 509 24.8 Leistungsoptimierung durch No-Tracking 509 24.8.1 No-Tracking aktivieren 510 24.8.2 No-Tracking fast immer möglich 511 24.8.3 No-Tracking im änderbaren Datagrid 513 24.8.4 QueryTrackingBehavior und AsTracking() 522 24.8.5 Konsequenzen des No-Tracking-Modus 523 24.8.6 Identitätsfeststellung 524 24.8.7 Best Practices 527 24.9 Leistungsoptimierung durch Compiled Queries 528 24.9.1 Konzept einer Compiled Query 528 24.9.2 Compiled Queries in Entity Framework Core 529 24.9.3 Leistungstest 529 24.9.4 Einschränkungen 532 24.10 Auswahl der besten Ladestrategie 533 24.10.1 Keine pauschale Aussage möglich 533 24.10.2 Vorsicht bei automatischem Lazy Loading 534 24.10.3 Eager Loading versus Client-Join 534 24.11 Zwischenspeicherung (Caching) 541 24.11.1 MemoryCache 541 24.11.2 CacheManager 543 24.12 Second-Level-Caching mit EFPlus 549 24.12.1 Einrichten des Second-Level-Cache 550 24.12.2 Verwenden des Second-Level-Cache 550 25 Zusatzwerkzeuge 553 25.1 DOTNET-Counters (Event Counter) 553 25.2 Entity Framework Core Power Tools (EFPT) 554 25.2.1 Funktionsüberblick 554 25.2.2 Reverse Engineering mit Entity Framework Core Power Tools 555 25.2.3 Schemamigrationen mit Entity Framework Core Power Tools 559 25.2.4 Diagramme mit Entity Framework Core Power Tools 560 25.3 LINQPad 562 25.3.1 Aufbau von LINQPad 563 25.3.2 Datenquellen einbinden 563 25.3.3 LINQ-Befehle ausführen 566 25.3.4 Abspeichern 568 25.3.5 Weitere LINQPad-Treiber 568 25.3.6 Interaktive Programmcodeeingabe 568 25.3.7 Fazit zu LINQPad 569 25.4 Entity Developer 569 25.4.1 Auswahl der ORM-Technik 570 25.4.2 Reverse Engineering mit Entity Developer 572 25.4.3 Forward Engineering mit Entity Developer 581 25.5 Entity Framework Profiler 586 25.5.1 Einbinden des Entity Framework Profilers 587 25.5.2 Befehle überwachen mit Entity Framework Profiler 588 25.5.3 Warnungen vor potenziellen Problemen 590 25.5.4 Analysefunktionen 591 25.5.5 Kommandozeilenunterstützung und API 591 25.5.6 Fazit zu Entity Framework Profiler 592 26 Zusatzkomponenten 593 26.1 Oracle-Treiber von DevArt (dotConnect for Oracle) 593 26.1.1 Unterstützte Oracle-Versionen 593 26.1.2 Installation 593 26.1.3 Visual Studio-Integration 595 26.1.4 Datenbanktreibername 598 26.1.5 Entity Framework Core-Werkzeuge 598 26.1.6 Kontextklasse 598 26.1.7 Entitätsklassen 599 26.1.8 Datentypen 599 26.2 Entity Framework Plus (EFPlus) 601 26.3 Second-Level-Caching mit EFSecondLevelCache.Core 602 26.4 Objekt-Objekt-Mapping mit AutoMapper 603 26.4.1 Objekt-Objekt-Mapping per Reflection 605 26.4.2 AutoMapper 607 26.4.3 Beispielszenario 607 26.4.4 Abbildungen konfigurieren 609 26.4.5 Abbildung ausführen mit Map() 609 26.4.6 Nicht-statisches API 610 26.4.7 Abbildungskonventionen 610 26.4.8 Abbildungskonventionen ändern 611 26.4.9 Profilklassen 612 26.4.10 Verbundene Objekte 612 26.4.11 Manuelle Abbildungen 613 26.4.12 Typkonvertierungen 615 26.4.13 Objektmengen 616 26.4.14 Vererbung 617 26.4.15 Generische Klassen 619 26.4.16 Zusatzaktionen vor und nach dem Mapping 621 26.4.17 Geschwindigkeit 623 26.4.18 Fazit zu AutoMapper 623 26.5 Andere Erweiterungen 624 27 Softwarearchitektur mit Entity Framework Core 626 27.1 Rolle von Entity Framework Core in der Softwarearchitektur 626 27.1.1 Monolithisches Modell 626 27.1.2 Entity Framework Core als Datenzugriffsschicht 627 27.1.3 Reine Geschäftslogik 628 27.1.4 Geschäftsobjekt- und ViewModel-Klassen 629 27.1.5 Verteilte Systeme 630 27.1.6 Fazit 633 27.2 Entity Framework Core in verteilten Systemen (N-Tier-Szenarien / Detached Objects) 634 27.2.1 Techniken für Verteilte Systeme in .NET 634 27.2.2 Detached Objects (Disconnected Objects) 634 27.2.3 Herausforderung 635 27.2.4 Detached Objects in 2-Tier-Anwendungen 636 27.2.5 Laden von Objekten 636 27.2.6 Objekte ändern 640 27.2.7 Punktuelle Aktualisierung 640 27.2.8 Nachrichtenbasierte Methodensignaturen 642 27.2.9 Vollständige Objektaktualisierung 643 27.2.10 Objektaktualisierung mit Datentransferobjekten 644 27.2.11 Änderungsverfolgung auf dem Client 646 27.2.12 Objekte löschen 648 27.2.13 Objektbäume persistieren 651 27.2.14 Objekte mit Autowert-Primärschlüssel 652 27.2.15 Objekte ohne Autowert-Primärschlüssel 655 27.2.16 TrackGraph() 656 27.2.17 State in jedem Entitätsobjekt 658 27.2.18 Open Data Protocol (OData) als Alternative 659 28 Praxislösungen 660 28.1 Entity Framework Core in einer ASP.NET Core-Anwendung 660 28.1.1 Das Fallbeispiel "MiracleList" 660 28.1.2 Architektur 663 28.1.3 Entitätsklassen 666 28.1.4 Entity Framework Core-Kontextklasse 668 28.1.5 Lebensdauer der Kontextklasse in ASP.NET Core-Anwendungen 670 28.1.6 Geschäftslogik 671 28.1.7 WebAPI 679 28.1.8 Verwendung von Entity Framework Core per Dependency Injection 687 28.1.9 Praxistipp: Kontextinstanzpooling (DbContext Pooling) 690 28.2 DevOps mit Entity Framework (Continous Integration und Continous Delivery) 690 28.2.1 Unit Tests und Integrationstests mit Entity Framework Core 691 28.2.2 In-Memory-Treiber 691 28.2.3 SQLite- In-Memory-Treiber 693 28.2.4 Entity Framework Core beim serverseitigen Build (Continous Integration) 695 28.2.5 Entity Framework Core beim automatischen Release (Continous Delivery) 698 28.3 Entity Framework Core in einer Universal Windows Platform App 699 28.3.1 Das Fallbeispiel "MiracleList Light" 699 28.3.2 Architektur 700 28.3.3 Entitätsklassen 701 28.3.4 Entity Framework Core-Kontextklasse 702 28.3.5 Startcode 703 28.3.6 Erzeugte Datenbank 704 28.3.7 Datenzugriffscode 705 28.3.8 Benutzeroberfläche 708 28.4 Entity Framework Core in einer Xamarin-Cross-Platform-App 709 28.4.1 Das Fallbeispiel "MiracleList Light" 709 28.4.2 Architektur 711 28.4.3 Entitätsklassen 712 28.4.4 Entity Framework Core-Kontextklasse 713 28.4.5 Startcode 714 28.4.6 Erzeugte Datenbank 715 28.4.7 Datenzugriffscode 715 28.4.8 Benutzeroberfläche 717 28.5 N:M-Beziehungen zu sich selbst 719 29 Migration von ADO.NET Entity Framework zu Entity Framework Core 725 29.1 Pro und Contra Migration 725 29.2 Koexistenz (Hybride Strategie) 726 29.3 Migration von Entity Framework Code First zu Entity Framework Core 726 29.4 Migration von EDMX zu Entity Framework Core 727 30 Quellen im Internet 729 31 Stichwortverzeichnis (Index) 730 32 Werbung in eigener Sache  743 32.1 Dienstleistungen 743 32.2 Aktion "Buch für Buchrezension" 744 32.3 Aktion "Buch-Abo" 745

Die bedingungslose Leanpub, Kein Risiko, 100% zufrieden Garantie

Innerhalb von 45 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.

Do Well. Do Good.

Authors have earned$10,462,200writing, publishing and selling on Leanpub, earning 80% royalties while saving up to 25 million pounds of CO2 and up to 46,000 trees.

Erfahren Sie mehr über das Schreiben mit 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), EPUB (for phones and tablets) and MOBI (for 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

Schreiben und veröffentlichen mit Leanpub

Autoren und Verlage nutzen Leanpub, um erstaunliche Fortschritte zu veröffentlichen und ebooks zu vervollständigen. Sie können Leanpub auch schreiben, veröffentlichen und verkaufen! Leanpub ist eine leistungsstarke Plattform für ernsthafte Autoren und kombiniert einen einfachen, eleganten Schreib- und Publishing-Workflow mit einem Laden, der sich auf den Verkauf von ebooks konzentriert. Leanpub ist eine magische Schreibmaschine für Autoren: Schreiben Sie einfach in Klartext, und um Ihr ebook zu veröffentlichen, klicken Sie einfach auf eine Schaltfläche. Es ist wirklich so einfach.

Erfahren Sie mehr über das Schreiben mit Leanpub