Allgemein Für Administratoren Für Architekten Für Entwickler Für Projektleiter Für Tester News Produkte Publikationen

Artikel mit ‘Identity’ getagged

X
Jan Mattner

Jan Mattner

Patch for Entity Framework models based on Oracle databases

Montag, 02. Juni 2014

If you use the Entity Framework (EF) with Oracle databases, you probably stumbled over the following problem. The ID field of a new entry is not automatically incremented in the EF model and keeps its default value 0, although a correct trigger has been defined in the database.

This problem is rooted in the Oracle databases up to version 12.0. Since these databases do not know identity columns, the increment is not done automatically and a workaround using triggers is necessary. Thus the identity property is not part of the *.edmx model which is created by the entity framework.

The downside of this becomes apparent if one adds new entries using the EF and assumes that the ID is automatically incremented. Actually all new entries have the default value 0 – but only in the EF model, the original entries in the database have been correctly modified! If the column in the EF model had the identity property, the model would have checked the database again and applied the right ID value.

Obviously the problem can be solved by adding the identity property post hoc to all identity columns in the EF model. This adjustment can be conveniently done by using the AIT EF Oracle Identity Patch. The patch can be downloaded as NuGet package. During the installation of the package, an *.xml configuration file is automatically created, in which one can define the columns that should be modified. In each build process this patch ensures that all specified columns in the *.edmx file have the identity property. The model is adjusted if necessary. Using this patch you don’t have to worry about the auto increment anymore.

X
Jan Mattner

Jan Mattner

Patch für Entity-Framework-Modelle basierend auf Datenbanken von Oracle

Dienstag, 27. Mai 2014

Wer das Entity Framework (EF) mit Datenbanken von Oracle nutzt, kennt das Problem. Das ID-Feld eines neuen Eintrags wird im EF-Modell nicht automatisch erhöht und hat den Wert 0, obwohl man den Trigger in der Datenbank richtig definiert hat.

Der Grund für das Problem liegt bei den Datenbanken von Oracle bis einschließlich Version 12.0, denn diese kennen keine Identitätsspalten, die ein automatisches Inkrement durchführen. Das Auto-Inkrement muss manuell durch die Einführung von Triggern bewerkstelligt werden. Deshalb spiegelt sich diese Identitätseigenschaft auch nicht in einem *.edmx-Modell wieder, welches im Rahmen des Entity Frameworks erstellt wird.

Dies kann man leicht zu spüren bekommen, wenn man nun über das EF neue Einträge anlegt und darauf vertraut, dass die ID automatisch erhöht wird. Denn nun haben alle neuen Einträge den Standardwert 0 – allerdings nur im EF-Modell, in der Datenbank wurde alles korrekt angelegt! Hätte die Spalte im EF-Modell die Identity-Eigenschaft, so hätte das Modell nochmal bei der Datenbank nachgefragt und die richtige ID übernommen.

Die Lösung des Problems liegt auf der Hand: jede Identitätsspalte muss nachträglich im EF-Modell mit der Identity-Eigenschaft versehen werden. Diese Anpassung kann ganz bequem mit dem AIT EF Oracle Identity Patch vorgenommen werden. Der Patch ist als NuGet-Paket erhältlich. Bei der Installation des Pakets wird automatisch eine *.xml-Konfigurationsdatei erzeugt, in der man jene Spalten definieren kann, für welche die Anpassung vorgenommen werden soll. Nun stellt dieser Patch bei jedem Build-Vorgang sicher, dass die angegebenen Spalten in der *.edmx-Datei die Identity-Eigenschaft haben und ändert notfalls das Modell. Damit muss man sich um das Auto-Inkrement keine Sorgen mehr machen.