Ho scritto quanto segue qualche tempo fa, ma sono venuto a leggerlo di recente, e ora non penso che sia un buon progetto.
Il design è per un tipo di strato di database modulare che utilizza Entity Framework 4. Esiste un singolo oggetto di database che carica (impercettibilmente) i contesti del framework di entità da librerie esterne in una posizione specificata, e le istanze dei contesti caricati sono memorizzate in un tabella hash contro il loro nome (EG "ContentMgmtContext").
Tutti i contatti con il database in questo sistema sono attraverso stored procedure. Per effettuare una chiamata al database, la firma del metodo di query ha il seguente aspetto:
List<TReturn> Query<TReturn>(string Context,
string Procedure,
TransactionScope Scope,
List<ObjectParameter> QueryParameters)
Questa modularità è qualcosa che mi piace. Tuttavia, questo approccio presenta uno svantaggio 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 del database vengono tradotti in nuovi oggetti utilizzati dalla vista e dal controller.
Penso che questo sia un cattivo design, ma come posso migliorarlo? Ho preso in considerazione l'aggiunta di un'interfaccia vuota come IStoredProecedureObject
per dare a ogni tipo di dati restituito da una stored procedure un tipo di base comune, tuttavia questo sembra essere sventato da Entity Framework. Ogni volta che il file .edmx
viene ricompilato, il codice viene generato di nuovo e tutte le aggiunte rimosse. C'è un modo per fermare questo evento?
Come posso migliorare questo design? Che (altro) ha sbagliato? O sono sulla strada giusta?