Tipps für Entity Framework 5+ in Kombination mit Web API

Verwendet man Entity Framework 5+ (DbContext) gemeinsam mit der Web API, so ergeben sich ein paar Fallstricke, deren Bewältigung an dieser Stelle aufgezeigt wird:

  • Standardmäßig leitet Entity Framework zur Laufzeit von den Entitäten ab und bringt in den so erzeugten Subklassen zusätzliche Logiken ein, um Lazy Loading zu ermöglichen. Allerdings funktioniert Lazy Loading in verteilten Umgebungen per se nicht wirklich und der Serializer hat Probleme mit diesen Klassen, die er nicht kennt. Deswegen ist es eine gute Idee, die Erzeugung dieser Proxy-Entitäten zu unterbinden. Dies kann beim verwendeten Context angeführt werden:

            this.Configuration.ProxyCreationEnabled = false;
  • Entitäten gehen in der Regel mit benachbarten Entitäten zyklische Abhängigkeiten ein. Standardmäßig haben die verwendeten XML- und JSON-Serializer damit ein Problem. Damit der XML-Serializer damit umgehen kann, annotiert der Entwickler zum Beispiel die einzelnen Entitäten mit [DataContract(IsReference=true)] und die einzelnen Eigenschaften mit [DataMember]. Um den JSON.Net-Serializer zu besämpftigen, kann man stattdessen die folgende Einstellung in der Datei App_Start\WebApiConfig vornehmen:

            config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;

    Um hingegen die zyklischen Referenzen zu erhalten, kann der Entwickler auf die Einstellung

            config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.None;

    zurückgreifen. Hierbei führt JSON.Net für sämtliche Objekte eine Id ein und kann somit auf bereits serialisierte Objekte verweisen. Dabei ist jedoch anzumerken, dass es sich hierbei nich um einen allgemein akzeptierten Mechanismus handelt, weswegen man den daraus resultierenden Nachrichten-Aufbau mit dem Kommunikationspartner abstimmen bzw. diesen davon in Kenntnis setzen muss.

 

Schulung und Beratung

Modern Web mit Angular 2

Datenbindung, Formulare, Validierung, Routing, HTTP, Komponenten, ...

Details

Migration auf Angular 2

Bestehende Projekte auf Angular 2 migrieren, ngUpgrade, ...

Details

Progressive Web-Apps mit Angular 2

InHouse-Schulung und/oder Beratung maßgeschneidert für Ihre Lernziele

Details

Architektur-Workshop

Interaktiver Prototyp-Workshop für Ihre Anwendung

Details

Entity Framework (EF)

Datenzugriff mit Entity Framework, Mapping-Szenarien, CRUD, Transaktionen, Migrations, Stored Procedures, Vererbung, Neuerungen in Version 7

Details

Angular 2: Deep Dive

Erweiterte Aspekte von Angular 2

Details

ASP.NET WebAPI

Web APIs mit ASP.NET, HTTP, REST, Security, Formatter, Tracing, OData, Streaming

Details

Web APIs mit ASP.NET MVC 6

Web APIs mit ASP.NET, HTTP, REST, Security, Formatter, Tracing, OData, Streaming

Details

Moderne Security-Szenarien für Web APIs

OAuth 2, OpenId Connect, JWT, Spielarten und Flows, ...

Details

Weitere Schulungen ...