Hi,
wir wollen bald mit einem Projekt unter C# starten und würden dafür gerne Firebird als Datenbank verwenden.
Was habt ihr so für Erfahrungen mit den verfügbaren Mappern in Verbindung mit Firebird?
Beim Entity Framework gibt es drei Sachen, die mich stören:
1. dass das EF (bzw. der Firebird Provider dafür) die Felder, die ihren Wert über einen Generator + Trigger erhalten, nicht automatisch als solche "Autowert"-Felder erkannt werden.
Da gibt es dann einen "dirty"-Trick... Man muss in der Spaltendefinition in Firebird den Kommentar der Spalte mit den Text "#PK_GEN#" belegen, also quasi
Code:
COMMENT ON COLUMN ANSCHRIFTEN.ID
IS '#PK_GEN#';
Das halte ich für eine unsaubere Umsetzung...
2. habe ich noch nicht herausgefunden, wie ich dem EF sagen kann, dass ein Feld über einen Autowert gefüllt wird, solange es keinen Inhalt hat.
Ich habe also einen Trigger auf dem Feld, welches auf NULL prüft. Wenn das Feld also NULL ist, wird ein berechneter Wert in das Feld eingetragen. Wenn nicht, bleibt mein vorgegebener Wert eingetragen.
Ich habe im EF aber nur die Möglichkeit zu sagen, dass ein Feld von der Datenbank berechnet wird. Dann kann ich aber überhaupt keinen Wert vorgeben. Oder sich sage, dass es nicht berechnet wird. Dann erhalte ich aber nicht den berechneten Wert zurück. (Kein Returning im generierten
SQL-Statement)
3. Es ist unglaublich langsam bei Batch-Inserts... Jeder Datensatz wird einzeln mit einem eigenen "EXECUTE BLOCK"-
SQL-Statement übetragen!
Und beim Telerik OpenAccess ORM hagelt es bei mir nur Fehlermeldungen, wenn ich Daten anfügen will. (Abfragen klappen komischerweise)
Ich habe mir auch schon überlegt, ob es vielleicht Sinn machen würde, sich selbst einen ORM zu schreiben, der quasi genau für Firebird und meinen Anforderungen aufgebaut ist... Was meint ihr?
Was nutzt ihr denn so?