L'applicazione che sto attualmente costruendo utilizza procedure memorizzate e modelli di classe realizzati a mano per rappresentare oggetti di database. Alcune persone hanno suggerito di utilizzare Entity Framework e sto prendendo in considerazione il passaggio a questo dato che non sono così lontano nel progetto. Il mio problema è che sento che le persone che litigano per EF mi dicono solo il lato positivo delle cose, non il lato negativo :)
Le mie principali preoccupazioni sono:
- Vogliamo la convalida lato client utilizzando DataAnnotations e sembra che debba comunque creare i modelli lato client, quindi non sono sicuro che EF risparmierebbe così tanto tempo di programmazione
- Vorremmo mantenere le classi il più piccole possibile quando si passa sulla rete e ho letto che l'uso di EF spesso include dati extra che non sono necessari
- Abbiamo un livello di database complesso che attraversa più database e non sono sicuro che EF possa gestirlo. Abbiamo un database comune con cose come Utenti, StatusCodes, Tipi, ecc. E più istanze dei nostri database principali per diverse istanze dell'applicazione. Le query SELECT possono e verranno interrogate in tutte le istanze dei database, tuttavia gli utenti possono modificare solo gli oggetti che si trovano nel database su cui stanno attualmente lavorando. Possono cambiare database senza ricaricare l'applicazione.
- Le modalità oggetto sono molto complesse e spesso sono coinvolti alcuni join
Gli argomenti per EF sono:
- Concorrenza. Non dovrei codificare nei controlli per vedere se il record è stato aggiornato prima di ogni salvataggio
- Generazione di codice. EF può generare modelli di classe parziale e POCO per me, tuttavia non sono sicuro che ciò mi farebbe risparmiare molto tempo poiché penso che dovremmo ancora creare modelli lato client per la convalida e alcuni metodi di analisi personalizzati.
- Velocità di sviluppo poiché non avremmo bisogno di creare le procedure memorizzate CRUD per ogni oggetto del database
La nostra architettura attuale è costituita da un servizio WPF che gestisce le chiamate al database tramite Stored procedure parametrizzate, oggetti POCO che vanno al / dal servizio WCF e dal client WPF e lo stesso client desktop WPF che trasforma i POCO in modelli di classe ai fini della convalida e Associazione dati.
Quindi la mia domanda è: EF ha ragione per questo? Ci sono insidie su EF di cui non sono a conoscenza?