Die Anwendung, die ich gerade erst erstelle, verwendet gespeicherte Prozeduren und handgefertigte Klassenmodelle, um Datenbankobjekte darzustellen. Einige Leute haben vorgeschlagen, Entity Framework zu verwenden, und ich denke darüber nach, dorthin zu wechseln, da ich noch nicht so weit im Projekt bin. Mein Problem ist, ich habe das Gefühl, dass die Leute, die für EF streiten, mir nur die gute Seite der Dinge erzählen, nicht die schlechte Seite :)
Meine Hauptanliegen sind:
- Wir möchten eine clientseitige Validierung mithilfe von DataAnnotations, und es klingt, als müsste ich sowieso clientseitige Modelle erstellen, sodass ich nicht sicher bin, ob EF so viel Codierungszeit einsparen würde
- Wir möchten die Klassen so klein wie möglich halten, wenn wir über das Netzwerk gehen, und ich habe gelesen, dass die Verwendung von EF häufig zusätzliche Daten enthält, die nicht benötigt werden
- Wir haben eine komplexe Datenbankschicht, die mehrere Datenbanken umfasst, und ich bin nicht sicher, ob EF damit umgehen kann. Wir haben eine gemeinsame Datenbank mit Benutzern, Statuscodes, Typen usw. und mehreren Instanzen unserer Hauptdatenbanken für verschiedene Instanzen der Anwendung. SELECT-Abfragen können und werden über alle Instanzen der Datenbanken hinweg abgefragt. Benutzer können jedoch nur Objekte ändern, die sich in der Datenbank befinden, an der sie gerade arbeiten. Sie können die Datenbank wechseln, ohne die Anwendung neu zu laden.
- Objektmodi sind sehr komplex und es sind oft einige Verknüpfungen beteiligt
Argumente für EF sind:
- Parallelität. Ich müsste nicht vor jedem Speichern in Schecks codieren, um zu sehen, ob der Datensatz aktualisiert wurde
- Codegenerierung. EF kann Teilklassenmodelle und POCOs für mich generieren. Ich bin jedoch nicht sicher, dass dies mir wirklich so viel Zeit ersparen würde, da ich denke, dass wir noch clientseitige Modelle für die Validierung und einige benutzerdefinierte Analysemethoden erstellen müssten.
- Entwicklungsgeschwindigkeit, da die gespeicherten CRUD-Prozeduren nicht für jedes Datenbankobjekt erstellt werden müssten
Unsere aktuelle Architektur besteht aus einem WPF-Dienst, der Datenbankaufrufe über parametrisierte gespeicherte Prozeduren, POCO-Objekte, die zum / vom WCF-Dienst und dem WPF-Client gehen, und dem WPF-Desktop-Client selbst, der POCOs zum Zweck der Validierung und in Klassenmodelle umwandelt Datenbindung.
Also meine Frage ist, ist EF richtig dafür? Gibt es irgendwelche Fallstricke bei EF, von denen ich nichts weiß?