Ho scritto quanto segue qualche tempo fa, ma sono venuto a recensirlo di recente, e ora non penso che sia un buon design.
Il design è per una sorta di livello di database modulare che utilizza Entity Framework 4. Esiste un singolo oggetto di database che carica (pigramente) contesti di framework di entità da librerie esterne in una posizione specificata e le istanze dei contesti caricati sono archiviate in una tabella hash contro il loro nome (ad es. "ContentMgmtContext").
Tutti i contatti con il database in questo sistema avvengono tramite stored procedure. Per effettuare una chiamata al database, la firma del metodo di query è simile alla seguente:
List<TReturn> Query<TReturn>(string Context,
string Procedure,
TransactionScope Scope,
List<ObjectParameter> QueryParameters)
Questa modularità è qualcosa che mi piace. Tuttavia, questo approccio presenta un inconveniente significativo: when using the database layer, the code using it has to have a reference to the library in which the context is stored, in order to access the types returned by the stored procedures through Entity Framework.nel modello, gli oggetti dal livello database vengono tradotti in nuovi oggetti utilizzati dalla vista e dal controller.
Penso che questo sia un cattivo design, ma come posso migliorarlo? Ho considerato l'aggiunta di un'interfaccia vuota come quella IStoredProecedureObjectdi assegnare a ogni tipo di dati restituito da una procedura memorizzata un tipo di base comune, tuttavia questo sembra essere sventato da Entity Framework. Ogni volta che il .edmxfile viene ricompilato, il codice viene generato di nuovo e tutte le aggiunte rimosse. C'è un modo per impedire che ciò accada?
Come posso migliorare questo design? Cosa (altro) c'è di sbagliato in questo? O sono sulla strada giusta?