SoftwareArchitekt.at | Schulungen, Trainings & Beratung in Deutschland und Österreich | Berater, Trainer, Autor, Dozent

 

Werte mit AngularJS in Abhängigkeit anderer Werte validieren

Die Tage wurde ich gefragt, wie man mit AngularJS Werte in Abhängigkeit von anderer Werte validieren kann. Anwendungsfälle dafür sind Eingaben die zur Bestätigung doppelt erfasst werden müssen oder logische Abhängigkeiten zwischen Zahlen und Datumswerten, bei denen ein Startwert kleiner oder gleich einem Endwert zu sein hat.Da Validatoren in AngularJS eigentlich benutzerdefinierte Direktiven sind, kann man sich hier auf die Möglichkeiten der Datenbindung mit isolierten Scopes stützen. Das nachfolgende Beispiel ... [Mehr]

Entity Framework Performance Tip #3: Daten ohne Änderungsverfolgung laden

DbContext führt Buch über sämtliche Entitäten, die ihm bekannt sind. Das sind Entitäten, die er geladen oder gespeichert hat, sowie Entitäten, die die Anwendung zum Kontext hinzugefügt (attached) hat. Dazu verwaltet er diese Entitäten mit Zustandsinformationen in einer internen Datenstruktur. Dies erzeugt einen Overhead, der gerade bei der Arbeit mit größeren Datenmengen spürbar wird ... [Mehr]

Entity Framework Performance Tip #2: Pre-Loading

Entity Framework stellt auch Verknüpfungen zwischen Objekte, die die Anwendung hintereinander in den Context lädt, über deren Navigationseigenschaften her. Ich bezeichne dies als Pre-Loading. Pre-Loading kann eine effiziente Alternative zum Eager Loading darstellen, zumal Entity Framework beim Einsatz von Eager Laoding sämtliche Daten über eine einzige Abfrage lädt. [Mehr]

Entity Framework Performance Tip #1: Ladestrategien

Entity Framework unterstützt zwei Ladestrategien für benachbarte Objekte: Lazy Loading lädt benachbarte Objekte bei Bedarf nach, Eager Loading lädt benachbarte Objekte mittels Outer-Joins sofort. Daneben kann der Entwickler eine weitere Lade-Strategie verwenden, die hier als Pre-Loading bezeichnet und in einem weiteren Beitrag näher betrachtet wird. Lazy Loading bietet sich für Fälle an, in denen ... [Mehr]

Middleware in ASP.NET vNext, Teil 1: Überblick

Wie von Microsofts OWIN-Implementierung Katana bekannt, besteht die Aufgabe der Klasse Startup bei ASP.NET vNext darin, Middleware-Komponenten zu registrieren. Diese Komponenten werden von jeder HTTP-Anfrage in der definierten Reihenfolge durchlaufen, wobei jede Komponente auch die weitere Verarbeitung einer Anfrage durch nachfolgende Komponenten unterbinden kann. HTTP-Antworten durchlaufen diese in umgekehrter Reihenfolge. Middlware-Komponenten implementieren verschiedene Aspekte der Kommunikation mit Clients. Dazu zählt zum Beispiel die Implementierung von Security-Szenarien, die Komprimierung von Seiteninhalten, das Unterstützen von CORS und Web-Sockets, das Ausliefern von statischen Dateien oder das Delegieren an Anwendungs-Frameworks, wie ASP.NET MVC oder SignalR. Obwohl ASP.NET vNext nicht primär auf OWIN basiert ... [Mehr]

Soft-Delete mit Entity Framework 6.1

Seit Entity Framework 6.1 können Entwickler mit CommandTreeInterceptoren SQL-Anweisungen abfangen und abändern. Im Gegensatz zu den CommandInterceptoren, die bereits mit 6.0 zur Verfügung standen, stellen CommandTreeInterceptoren die SQL-Anweisung nicht in Form eines Strings sondern in Form eines Syntax-Baumes dar. Dies vereinfacht das Abändern der Anweisung. Auf diese Weise lassen sich globale Filter definieren. Ein solcher globaler Filter könnte zum Beispiel festlegen, dass nur Datensätze mit einem bestimmten Status oder nur Datensätze eines bestimmten Mandanten geladen werden. Dazu müsste der Interceptor jeder Abfrage um eine entsprechende Einschränkung erweitern. [Mehr]

Stored Functions mit Entity Framework Code First nutzen

Während Entity Framework prinzipiell mit Stored Functions bzw. Table Valued Functions, die innerhalb von Abfragen eingesetzt werden können, umgehen kann, hat diese Möglichkeit noch nicht den Weg in die Welt von Code First geschafft. Allerdings können Entwickler seit Entity Framework 6.1 auf die Mapping API zugreifen. Dabei handelt es sich um ein Objektmodell, welches in vergangenen Versionen lediglich interne zur Verfügung stand und sowohl lesenden als auch schreibenden Zugriff auf das Entity Data Model gewährt. Dies kann man sich zunutze machen, um eine Unterstützung für Stored Functions bzw. Table Valued Functions zu implementieren. Da das Entity Data Model und seine Repräsentation durch die Mapping API recht komplex sind, handelt es sich bei dieser Aufgabe nicht um etwas, das man nebenbei erledigen kann.

Glücklicherweise hat sich darum bereits jemand angenommen und das Ergebnis dieses Unterfangens als freies Projekt bereitgestellt. Dieses findet man unter [4]. Es bietet für die Konfiguration von Sotred Functions bzw. Table Valued Functions in Code-First-Szenarien eine einfache API, welche die Komplexität der Mapping-API verbirgt. Jenen, die wissen möchten, wie dieses Projekt die Mapping-API verwendet oder nicht von einem externen Projekt abhängig sein wollen, bietet dieser Beitrag eine nähere Beschreibung des von diesem Projekt verfolgten Ansatzes. [Mehr]

EF 6.1: Datenbanksitzung mit IDbConnectionInterceptor mit Custom-SQL initialisieren

Entity Framework 6.1 bringt eine ganze Menge neuer Interceptoren, mit denen der Entwickler seine eigenen Routinen einklinken kann. Einer davon ist der DbConnectionInterceptor, der Methoden anbietet, die zum Beispiel Entity Framework vor sowie nach dem Öffnen bzw. Schließen einer Datenbankverbindung ausführt.

Mit diesem Interceptor kann der Entwickler Entity Framework anweisen, im Zuge jedes Verbindungsaufbaus bestimmte Befehle an die Datenbank zu senden. Das könnten Befehle zum Initialisieren der Verbindung sein oder Befehle, die temporäre Tabellen erzeugen. Ob letzteres von guter Architektur zeugt, sei an dieser Stelle dahingestellt.

Um einen DbConnectionInterceptor bereitzustellen, implementiert der Entwickler ... [Mehr]

Validieren internationalisierter Eingaben mit AngularJS

Während AngularJS die Internationalisierung von Ausgaben erlaubt, bietet es (derzeit noch) keine Unterstützung für das Erfassen von Eingaben, die internationalisiert vorliegen. Allerdings gibt AngularJS dem Entwickler die Möglichkeit, benutzerdefinierte Validatoren festzulegen. Daneben kann der Entwickler angeben, wie die erfassten Eingaben für die Verwendung im Model aufzubereiten sind. Somit kann zum Beispiel der von einem deutschen Benutzer erfasste String „47,11“ im Model durch eine Eigenschaft vom Typ number mit dem Wert 47.11 repräsentiert werden.

Zum Definieren eigener Validatoren implementiert der Entwickler... [Mehr]