Das sind die Überarbeitungen von .NET Core, ASP.NET Core und Entity Framework Core in Version 2.1

Mehr Plattformen, Werkzeuge und Klassen

.NET Core 2.1 unterstützt als Betriebssysteme neben Windows, macOS, RHEL, Fedora, Debian, SLES und openSuse auch Ubuntu und Alpine Linux, die aktuelle Ubuntu-LTS-Version 18.04 sowie Raspberry Pi 2+ mit ARM-v7- oder -v8-Chips. Das Kommandozeilenwerkzeug dotnet bietet jetzt auch globale Werkzeuge, wie man sie aus Node.js und npm kennt. Nach der Installation solcher Werkzeuge mit dotnet tool install -g abc können Entwickler nicht nur über dotnet abc, sondern auch über die Eingabe abc die Werkzeuge direkt starten.

Die umfangreichste funktionale Verbesserung in .NET Core 2.1 ist die Verfügbarkeit des Windows Compatibility Pack for.NET Core, das viele Klassen aus dem alten .NET Framework 4.x in die .NET-Core-Welt portiert. Dazu gehören zum Beispiel Klassen für den Registry-Zugriff, Datenbankzugriffe per ODBC, LINQ für DataSets, das Code Document Object Model (CodeDOM), Zugriff auf serielle Ports und LDAP-Server wie das Active Directory sowie die sehr umfangreiche Windows Management Instrumentation (WMI), mit der man Informationen aus dem Betriebssystem auslesen und verändern kann. Zu beachten ist aber, dass einige dieser Bibliotheken nur auf Windows laufen und daher nur dann eingesetzt werden können, wenn eine .NET-Core-Anwendung nicht plattformneutral sein muss, sondern der ausschließliche Betrieb auf Windows benötigt wird.

Lückenschluss in Entity Framework Core

Bei Entity Framework Core schließt Microsoft vier gravierende Schwächen, die die Core-Variante bisher noch gegenüber dem klassischen ADO.NET Entity Framework hatte. Zum einen werden mit dem LINQ-Operator GroupBy deklarierte Gruppierungen nun tatsächlich zur Datenbank gesendet und nicht mehr im RAM ausgeführt, was bisher gerade bei großen Datenmengen zu einer inakzeptablen Ausführungsgeschwindigkeit führte. Zum anderen bietet Entity Framework Core nun auch das aus dem Vorgänger bekannte automatische Lazy Loading verbundener Datensätze wieder an. Es ist aber nicht mehr wie im Vorgänger automatisch aktiv, sondern muss von Entwicklern explizit eingeschaltet werden, um das unbewusste Nachladen von Daten in Schleifen zu verhindern, was im klassischen Entity Framework oft zu Leistungsproblemen führte. Entwickler können in Entity Framework Core zwischen Lazy Loading mit automatisch generierten Runtime Proxies oder einer vom ORM-Mapper unterstützten Lösung mit eigenen Ergänzungen der Entitätsklasse wählen.

Drittens gibt es nun auch Unterstützung für "ambiente Transactions" mit System.Transactions.TransactionScope, was die Programmierung von Transaktionen über zahlreiche Datenbankoperationen hinweg sehr vereinfacht. Durch den vierten Lückenschluss ist es jetzt wieder möglich, beliebige Resultsets auf Nicht-Entitätstypen abzubilden. Damit können Entwickler Datenbank-Views, Tabellen ohne Primärschlüssel und Ergebnisse von SQL-Befehlen, Stored Procedures und Table Value Functions nutzen, auch wenn deren Resultset nicht der Struktur einer bestehenden Tabelle entspricht.

Darüber hinaus enthält Entity Framework Core auch ganz neue Funktionen: Die neu eingeführten Value Converters erlauben Wertkonvertierung beim Materialisieren und Speichern von Objekten. Der im Februar angekündigte Microsoft-Treiber für CosmoDB steckt weiterhin in den Kinderschuhen. Nutzer von Drittanbietertreibern (z.B. für Oracle oder MySQL) müssen aktuelle Treiber von dem Hersteller beziehen, da die bestehenden Treiber für Entity Framework Core 2.0 nur bedingt kompatibel zu Entity Framework Core 2.1 sind.