Escrevi o seguinte há um tempo, mas vim para revê-lo recentemente e agora não acho que seja um bom design.
O design é para um tipo de camada de banco de dados modular usando o Entity Framework 4. Há um único objeto de banco de dados que carrega (preguiçosamente) contextos de estrutura de entidade de bibliotecas externas em um local especificado, e as instâncias dos contextos carregados são armazenadas em uma tabela de hash contra seu nome (por exemplo, "ContentMgmtContext").
Todo contato com o banco de dados neste sistema é através de procedimentos armazenados. Para fazer uma chamada ao banco de dados, a assinatura do método de consulta é semelhante a esta:
List<TReturn> Query<TReturn>(string Context,
string Procedure,
TransactionScope Scope,
List<ObjectParameter> QueryParameters)
Essa modularidade é algo que eu gosto. No entanto, há uma desvantagem significativa nessa abordagem: 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.
no modelo, os objetos da camada de banco de dados são convertidos em novos objetos que a visualização e o controlador usam.
Eu acho que esse é um design ruim, mas como posso melhorá-lo? Eu considerei adicionar uma interface vazia IStoredProecedureObject
para fornecer a todos os tipos de dados retornados por um procedimento armazenado um tipo de base comum, no entanto, isso parece frustrado pelo Entity Framework. Sempre que o .edmx
arquivo é recompilado, o código é gerado novamente e as adições removidas. Existe alguma maneira de impedir que isso aconteça?
Como posso melhorar esse design? O que (mais) há de errado com isso? Ou estou no caminho certo?