Escribí lo siguiente hace un tiempo, pero he venido a revisarlo recientemente, y ahora no creo que sea un buen diseño.
El diseño es para un tipo de capa de base de datos modular que usa Entity Framework 4. Hay un único objeto de base de datos que carga (perezosamente) contextos de marco de entidad de bibliotecas externas en una ubicación específica, y las instancias de los contextos cargados se almacenan en una tabla hash contra su nombre (por ejemplo, "ContentMgmtContext").
Todo contacto con la base de datos en este sistema es a través de procedimientos almacenados. Para realizar una llamada a la base de datos, la firma del método de consulta se ve así:
List<TReturn> Query<TReturn>(string Context,
string Procedure,
TransactionScope Scope,
List<ObjectParameter> QueryParameters)
Esta modularidad es algo que me gusta. Sin embargo, hay un inconveniente importante en este enfoque: 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.
en el modelo, los objetos de la capa de la base de datos se traducen en nuevos objetos que utilizan la vista y el controlador.
Creo que este es un mal diseño, pero ¿cómo puedo mejorarlo? He considerado agregar una interfaz vacía IStoredProecedureObject
para dar a cada tipo de datos devuelto por un procedimiento almacenado un tipo base común, sin embargo, esto parece ser frustrado por Entity Framework. Cada vez .edmx
que se vuelve a compilar el archivo, el código se genera nuevamente y se eliminan las adiciones. ¿Hay alguna forma de evitar que esto suceda?
¿Cómo puedo mejorar este diseño? ¿Qué (más) está mal con eso? ¿O estoy en el camino correcto?