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.