Wo erkennst du einen Widerspruch? Ich wäge ab, natürlich sehe ich auch die Vorteile, wenn generierter Code nicht eingecheckt ist, aber das bringt eine andere Organisation mit sich. Beides hat Vor- und Nachteile.
Ein Entwickler pro Projekt, nicht im ganzen Unternehmen. Es können aber schon auch mal 2-3 Entwickler sein, oder eben auch nur einer, oft ist das dann der DBA.
Du willst keinen Vorteil sehen, das ist gerade das Problem.
*** Edit ***
Ich bin gerade mit ENUMs beschäftigt und da fällt mir ein gutes Beispiel ein:
ENUM Felder und ihre Werte sind ja schon ne halb dynamische Sache in der Verarbeitung, z.B. wird bei keiner Angabe der erste ENUM Wert gespeichert o.ä. Das kann man in einem Integrationstest ja auch schön testen, klar.
Sagen wir mal es gibt ein ENUM Feld in einer Tabelle mit den Werten A,B und C. Jetzt wird ein Datensatz gespeichert und in dem Feld wird A gespeichert, da im DTO kein konkreter Wert angegeben war.
Nun könnte es Änderungen am DB Schema geben und die Reihenfolge der ENUM Werte hat sich verändert, z.B. weil A rausgefallen ist oder ein neuer Wert D wurde am Anfang eingefügt…bewusst oder auch unbewusst, beides wäre möglich.
So, nun gibt es unsere 2 Varianten: generierter Code ist eingecheckt oder eben nicht.
Natürlich haben wir für die Änderungen einen Integrationstest geschrieben. Was passiert also, wenn man das DB Schema in der CI Umgebung vergisst zu aktualisieren? Der Test schlägt fehl, weil der Test natürlich nicht mehr auf A testet, sondern auf D.
Ok, und was passiert in der CI Umgebung, wenn das Schema aktuell gehalten wurde? Der Test wird erfolgreich laufen, alles ok.
Und was nun? Test war erfolgreich, also wandert der Code in die nächste Umgebung, automatisiert per CD oder manuelles Update, z.B. für diverse Systemtests oder gar Kundentests/Akzeptanztests.
Was aber passiert, wenn eine dieser folgenden Umgebungen nicht an dieser Stelle im Schema aktualisiert wurde und generierte Klassen nicht eingecheckt sind?
Tja, der Fehler wird nirgends angezeigt, da ja sowohl DB Schema und Entity exakt gleich falsch sind. Es wird einfach mit A gearbeitet, statt mit D.
Wäre die generierte Klasse eingecheckt und damit auf dem aktuellen Stand, würde es an irgendeiner Stelle auf jedenfall krachen und der Fehler wäre erkannt.
Je später ein Fehler entdeckt wird, desto teurer ist er. Und das Beispiel hat gezeigt, dass das Risiko einen logischen Fehler erst sehr spät oder überhaupt nicht zu entdecken wesentlich höher ist, wenn Datenquelle und dazu generierter Code zueinander passen. Und sie passen nunmal immer zueinander, wenn man den Code nicht eincheckt.