Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   C# Erfahrungen ORM mit Firebird (https://www.delphipraxis.net/169160-erfahrungen-orm-mit-firebird.html)

Morphie 3. Jul 2012 09:01

Erfahrungen ORM mit Firebird
 
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?

mjustin 3. Jul 2012 09:35

AW: Erfahrungen ORM mit Firebird
 
Ist NHibernate schon bei der Vorauswahl des ORM ausgeschieden? Es hat im Java Umfeld große Verbreitung, ich weiss nicht wie gut der .NET Port ist.

Daneben würde ich als Vergleich zu Firebird noch eine andere, möglichst verbreitete Datenbank wie zum Beispiel PostgreSQL testen.

Morphie 3. Jul 2012 09:42

AW: Erfahrungen ORM mit Firebird
 
NHibernate habe ich noch nicht getestet... Werde ich aber nachholen ;-)
Hat dazu vielleicht schon jemand Erfahrungen in Verbindung mit FB?

Eigentlich bin ich mit Firebird sehr zufrieden...
Viele Features, leichte Installation, Embedded Support, erweiterbar, schnell und stabil... Nur weil es "keinen guten" ORM für Firebird gibt, würde ich ungern auf Firebird verzichten. Da schreibe ich mir den ORM dann doch lieber selbst und habe zudem auch noch volle Kontrolle über meinen Code...

Iwo Asnet 3. Jul 2012 10:51

AW: Erfahrungen ORM mit Firebird
 
Zitat:

Zitat von Morphie (Beitrag 1173261)
Da schreibe ich mir den ORM dann doch lieber selbst und habe zudem auch noch volle Kontrolle über meinen Code...

Ein Paradigmen-Wechsel(hier: zu einer anderen DB) geht schneller.

PostGreSQL ist schon sehr anständig, aber wenn schon .NET, wieso dann nicht MSSQL? Das passt schließlich wie Faust auf Auge und C#/VS bringt alles mit, was man so braucht, um sich um ORM nicht mehr zu kümmern...

Oder bist Du ein 'Microsofthasser'? ;-)

Morphie 3. Jul 2012 11:08

AW: Erfahrungen ORM mit Firebird
 
Nö... habe ich auch schon mal getestet...
Soll aber kostenlos sein und die 4/10 GB bei der Express-Version reichen für unsere Anwendungszwecke langfristig (10+ Jahre) nicht aus.
Wäre ich ein "Microsofthasser" wäre ich bei Delphi geblieben ;-)

Iwo Asnet 3. Jul 2012 11:16

AW: Erfahrungen ORM mit Firebird
 
Dann nimm PostGres bzw. ziehe es in Erwägung. Wir verwenden das auch mit .NET und großen DBs.
Mit ORM habe ich aber keine Erfahrungen, obwohl der Programmierer schon einen Workshop mit NHibernate gemacht hat. Und ich denke, Du wärst nicht der Einzige, der PostGes mit NHibernate verwendet.

Patito 3. Jul 2012 12:42

AW: Erfahrungen ORM mit Firebird
 
Von mir gibts ein +1 fürs selber machen.

Wenn man sich mit Datenbanken auskennt hat man langfristig mehr davon.
Bei festen Frameworks muss man damit rechnen fachgerechtes Datenbank-Design an ein paar Stellen
gegen Framework-konformen Murks austauschen zu müssen...

Laut Google-Trends ist Firebird etwas auf dem absteigenden Ast, lebt aber noch ganz gut.
Postgres hält sich da etwas besser, ist aber immer noch eher ein (schöner) Zwerg in der DB-Landschaft.

ThomasBab 3. Jul 2012 12:49

AW: Erfahrungen ORM mit Firebird
 
Zitat:

Zitat von Patito (Beitrag 1173311)
Laut Google-Trends ist Firebird etwas auf dem absteigenden Ast, lebt aber noch ganz gut.
Postgres hält sich da etwas besser, ist aber immer noch eher ein (schöner) Zwerg in der DB-Landschaft.

Hast Du bei google-trends "Firebird" eingegeben und dann die Kurve interpretiert?

Wenn ja, dann zitiere ich mal die wichtigsten Ergebnisse:


Firebird: The hottest PC gaming news at CES?
Globe and Mail - Jan 6 2009
My 3-minute thrill in a scary Pontiac Firebird
Detroit Free Press - Apr 28 2009
NHRA, Firebird officials meet over spectator's death
Toronto Star - Feb 23 2010
Moment a Pontiac Firebird hits Ohio bridge at 100mph while overtaking patrol car
Daily Mail - Aug 24 2010
Northrop Grumman Firebird UAV lets pilots ride too
CNET - May 9 2011
Jack Beckman takes Funny Car lead with third win at Firebird International
Washington Post - Oct 17 2011

Ich denke mal, das beweist wieder den Spruch mit der Glaubwürdigkeit von Statistiken, die man nicht selbst gefälscht hat.

Iwo Asnet 3. Jul 2012 13:00

L
 
[QUOTE=ThomasBab;1173315]
Zitat:

Zitat von Patito (Beitrag 1173311)
Ich denke mal, das beweist wieder den Spruch mit der Glaubwürdigkeit von Statistiken, die man nicht selbst gefälscht hat.

Wo ist dort -bitteschön- etwas gefälscht? Das ist glasklar eine Statistik der Aufrufhäufigkeit des Wortes "Firebird".

Ich glaube aber, die Kurve ist eh immer gleich.

Versuche: "firebird database", geht runter.
"PostGreSQL" geht runter.
"Oracle" geht runter,
"MSSQL" oder "SQL-Server": Auch runter.

Was geht eigentlich hoch?)
"Rihanna". Logisch.
"Google"? Ne, is klar. :stupid:

Patito 3. Jul 2012 13:16

AW: Erfahrungen ORM mit Firebird
 
Zitat:

Zitat von ThomasBab (Beitrag 1173315)
Zitat:

Zitat von Patito (Beitrag 1173311)
Laut Google-Trends ist Firebird etwas auf dem absteigenden Ast, lebt aber noch ganz gut.
Postgres hält sich da etwas besser, ist aber immer noch eher ein (schöner) Zwerg in der DB-Landschaft.

Hast Du bei google-trends "Firebird" eingegeben und dann die Kurve interpretiert?

Ich denke mal, das beweist wieder den Spruch mit der Glaubwürdigkeit von Statistiken, die man nicht selbst gefälscht hat.

Ich denke mal deine Linksammlung zeigt mal wieder, dass es Leute gibt, die mit Google umgehen können,
und Leute, die es nicht können... Vielleicht lernst Du ja auch irgendwann mal wie es geht...

taveuni 3. Jul 2012 13:51

AW: Erfahrungen ORM mit Firebird
 
Zitat:

Zitat von Morphie (Beitrag 1173294)
und die 4/10 GB bei der Express-Version reichen für unsere Anwendungszwecke langfristig (10+ Jahre) nicht aus.

Was sind denn das für Daten welche 10 Jahre zurück(in der selben Datenbank) zur Verfügung stehen müssen?
Gibt es keine Möglichkeit diese in eine andere DB zu sichern bevor die 10GB Grenze erreicht ist?

Edit: Sorry - Hat eigentlich mit der Ursprungsfrage nichts zu tun.

Morphie 3. Jul 2012 14:17

AW: Erfahrungen ORM mit Firebird
 
Klar wäre das möglich...
Aber wozu, wenn es Datenbanken gibt, die das kostenlos ermöglichen?

Für mich fällt der SQL Server auf jedenfall weg.
Für kleinere / private Projekte ist er aber sicherlich gut... Dafür ist er ja schließlich auch vorgesehen ;-)

Die Datenbank steht fest (darüber haben wir hier oft und lange diskutiert), daher bitte zurück zum eigentlichen Thema.

Lemmy 3. Jul 2012 14:39

AW: Erfahrungen ORM mit Firebird
 
Hi,

erzähl doch erst mal warum du ein ORM einsetzen willst. Da du auf Firebird abfährst vermute ich, dass das Thema unterschiedliche DBs schon mal außen vor ist. Dann kann es durchaus sinnvoll sein, sich mit dem Thema "eigenes ORM" zu beschäftigen.

Ich kenne mich jetzt mit C# nicht wirklich gut aus, bin aber der Meinung, dass das schon einige Dinge mitbringt um ein eigenes kleines ORM in einem vertretbaren Zeitrahmen umzusetzen (De-/Serialisierung, Objekte an Oberfläche hängen,....). Habe so was mal mit Delphi gemacht, und würde nach dem Test verschiedener ORM (InstantObjects, tiOPF, NHibernate,...) im nächsten Projekt wo so was Sinn macht vermutlich wieder so beginnen. Zum einen ist die Einarbeitung in ein ORM nicht zu verachten, zudem kann es auch sein, dass die Philosophie eines Frameworks einfach nicht zur Aufgabenstellung passt. Zudem hast Du bei einem leichtgewichtigen eigenen ORM immer noch die Möglichkeit über einen Direktzugriff auf die DB gewisse kritische Funktionen entsprechend schnell auf der DB auszuführen.

Grüße

Morphie 3. Jul 2012 15:06

AW: Erfahrungen ORM mit Firebird
 
Zitat:

Zitat von Lemmy (Beitrag 1173336)
erzähl doch erst mal warum du ein ORM einsetzen willst. Da du auf Firebird abfährst vermute ich, dass das Thema unterschiedliche DBs schon mal außen vor ist. Dann kann es durchaus sinnvoll sein, sich mit dem Thema "eigenes ORM" zu beschäftigen.

ADO.NET in Verbindung mit WPF lädt ja quasi dazu ein, die Daten irgendwie zu mappen und anschließend als Objekte weiterzuverwenden / an die Oberfläche zu binden.
Das Abfragen der Daten über LINQ empfinde ich auch als sehr angenehm...

So ein ORM nimmt mir halt viel Arbeit ab.
Die generierten Klassen haben schon alle die gewünschten Interfaces implementiert und sind für mich leicht zu erweitern.

Vorher habe ich viel mit reinem SQL (Command + DataReader) materialisiert. Das ging zwar richtig schnell und ich konnte die ganzen Features von Firebird benutzen, doch es war sehr aufwändig.

Mit DataSets konnte ich mich nie wirklich anfreunden.
Jetzt hat man schon mal so eine stark objektorientierte Programmiersprache, dann will man auch mit echten BusinessObjekten arbeiten... ;-)

Zitat:

Zitat von Lemmy (Beitrag 1173336)
Zum einen ist die Einarbeitung in ein ORM nicht zu verachten, zudem kann es auch sein, dass die Philosophie eines Frameworks einfach nicht zur Aufgabenstellung passt. Zudem hast Du bei einem leichtgewichtigen eigenen ORM immer noch die Möglichkeit über einen Direktzugriff auf die DB gewisse kritische Funktionen entsprechend schnell auf der DB auszuführen.

So denke ich auch...

Elvis 3. Jul 2012 17:55

AW: Erfahrungen ORM mit Firebird
 
Zitat:

Zitat von Morphie (Beitrag 1173253)
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...

Naja, wenn du den Comment nicht nutzt, dann ist das einfach ein nachgeholtes Stück "Metadaten". Denn Firebird hat ja leider keine abfragbare Info darüber, dass ein Feld AutoInc'd wird.

Wenn der EF Provider sonst das tut was er soll, dann würde ich dir (gerade wenn ORMs-Neuland für dich sind) EF empfehlen.

NHibernate ist ungleich mächtiger, und man kann sich an praktisch allen Stellen selbst reinklinken und die Rädchen so einstellen, wie man es für sein Projekt haben will.
Allerdings muss man bei nHibernate wissen, wie man LINQ Queries schreiben muss, damit sie nicht zicken. (LINQ ist noch das große Manko von NHibernate)
Aber das ist alles für einen ORM-Einsteiger wohl etwas Overkill.

Fang also einfach mit EF an. Und wenn du den Comment brauchst, dann setz' ihn halt.
Stumpfsinniges Dogma kannst du dem Papst überlassen, das hat beim Programmieren nix zu suchen.


Kann denn Firebird mittlerweile vernünftig mit GUIDs umgehen? Wenn ja, dann gar nicht lange murksen und GUIDs anstatt Trigger und AutoInc nehmen.

btw: Kann der EF-Provider nicht die DB passend für deine Klassen erzeugen? Mich würde ein Comment in der DB nicht stören.
Die DB ist ja nur das Teil, was die Daten speichert. Genau dafür hast du ja den ORM. Wie das da aussieht ist fast egal. (Darf nur nicht uneffizient sein)
Denn wenn du nicht gegen eine exakte DB programmierst, sondern es dem ORM überlässt deine Klassen abzubilden, kannst du einfach auch mal postgres ausprobieren. ;-)

Phoenix 3. Jul 2012 20:13

AW: Erfahrungen ORM mit Firebird
 
Ich persönlich habe noch nie einen ORM so schnell an seine Grenzen gebracht wie das EF (EF2, that is).
Das ging soweit, das für einen generischen Tabelleneditor mit zusammenklickbaren Views über die Entities das EF geschlagene 30 Minuten(!) an einem SQL Query berechnet hat (okay, es waren ne handvoll includes über Navigational Properties drin), und das Query hatte dann am Schluss joins über 256 Tabellennamen drin (waren in Summe aber nur 8-10 einzelne Tabellen, die standen halt zigmal drin), was der SQL Server dann konsequenterweise nicht mehr mitgemacht hat.

Eigentlich erwarte ich von einem OR-Mapper, dass er die Statements entsprechend optimiert, und vor allem nicht 30 Minuten rumrechnet.

mjustin 4. Jul 2012 05:53

AW: Erfahrungen ORM mit Firebird
 
Auf Stackoverflow gibt es einige Beiträge zu diesem Thema:


http://stackoverflow.com/questions/2...et-application

* NHibernate und PostgreSQL als Kombination wird empfohlen
* von EF wird abgeraten wenn man es nicht zusammen mit MS SQL verwendet (allerdings ist der Beitrag aus 2008 also vor EF 2)

http://stackoverflow.com/questions/6...l-applications

* Dapper und PetaPoco werden als 'leichtgewichtige' Alternativen genannt

Vergleich EF und NHibernate:

* http://stackoverflow.com/a/5105917/80901


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz