© best_vector/Shutterstock.com
Kolumne: .NETversum

Tipps und Tricks rund um .NET und Visual Studio


Massenoperationen mit Entity Framework

Entity Framework bietet in seiner Grundausstattung keine Unterstützung von Massenoperationen auf mehr als einem Datensatz, sondern behandelt für das Löschen und Ändern jeden Datensatz einzeln.

Wenn man bei einer größeren Anzahl von Objekten die gleiche Aktion ausführen will (z. B. bei vielen Flugobjekten einen Platz reduzieren will), lädt Entity Framework alle Objekte ins RAM (in einer Operation) und erzeugt dann einen UPDATE-Befehl (für jedes Objekt einzeln). Das macht man besser mit einem einzigen SQL-Befehl:

UPDATE [Betrieb].[Flug] SET [FreiePlaetze] = [FreiePlaetze]-1 WHERE FlugNr > 50000

Gleiches gilt für das Löschen von Objekten: Entity Framework muss Objekte geladen haben, um sie löschen zu können und sendet dann pro Objekt einen DELETE-Befehl, selbst dann, wenn man in SQL schreiben könnte:

Delete Betrieb.Flug where FlugNr > 50000

Das Absetzen dieses SQL erledigt der Entwickler entweder auf die klassische Art über ein ADO.NET Command mit Parameterobjekt oder über die direkte SQL-Unterstützung im Entity Framework (mit der Methode ExecuteSqlCommand() im Unterobjekt Database des Entity-Framework-Kontexts):

using (var ctx = new WWWings6Entities()) { var grenze = 50000; var anz = ctx.Database.ExecuteSqlCommand("Delete Betrieb.Flug where FlugNr > {0}", grenze); }

Dies ist ein Vielfaches schneller als das Absetzen vieler einzelner Operationen. Daher sollte man einer Massenoperation immer den Vorzug geben, wenn sie möglich ist.

Eigene Cursorgrafiken in WPF

Windows enthält mehrere vordefinierte Cursorarten (siehe Systemsteuerung). Entwickler haben die Möglichkeit, in ihren Anwendungen eigene selbsterstellte Cursorgrafiken zu verwenden. Dazu erstellt man eine Cursorgrafikdatei .cur, zum Beispiel mithilfe von Visual Studio und der Elementvorlage „Cursor“. Visual Studio bietet dafür ein Zeichenwerkzeug an (Abb. 1).

schwichtenberg_1.tif_fmt1.jpgAbb. 1: Erstellen einer Cursordatei (.cur) in Visual Studio

Cursordateien zuweisen

Die Cursordatei kann man dann zur Laufzeit laden und einem WPF-Fenster zuweisen. Das Laden kann aus einer Datei erfolgen:

var file = File.OpenRead(@"t:\Grafiken\ITVCursor.cur"); Cursor cursor1 = new Cursor(file); this.Cursor = cursor1;

Oder das Laden kann aus seiner eingebetteten Ressource erfolgen, die als Streamobjekt geladen wird:

Stream stream= Assembly.GetExecutingAssembly().GetManifestResourceStream("ITV_AppUtil.ManualTest.ITVCursor.cur"); Cursor cursor2 = new Cursor(stream); this.Cursor = cursor2;

Multi-Image-Cursordatei...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang