Asesoramiento en materia de modificación de NetTiers
-
10-10-2019 - |
Pregunta
Estoy usando Evaluando NetTiers para mi próximo proyecto.
La cuestión es: Cada mesa en mi esquema tiene un AccountId campo. Con cada solicitud a la DAL quiero que sea un requisito de que el AccountId se pasa y se utiliza como un filtro en la consulta.
Sería aceptable si se genera una sobrecarga adicional que utiliza este parámetro de.
Sospecho que esta funcionalidad no se construye en la lata cualquier persona ofrecer consejos sobre dónde comenzar con la modificación de las plantillas para agregarlo?
Solución
Modificación de los modelos NetTiers no es difícil una vez que tipo de saber cómo funciona todo el laberinto de clases que genera, pero por lo general es bastante tedioso y muy propenso a errores.
Mi primera suposición es que la base de datos se está generando es fuera o bien tiene sólo unas pocas mesas o se desnormalizaremos - de lo contrario no tendría sentido tener un AccountId columna en cada mesa. Si se trata de la tarde y la estructura no puede normalizarse, se cree que sería un cambio bastante fuerte para obtener todos los confieren propiedades de navegación construido en base a las claves externas de bases de datos (incluyendo DeepLoads) que trabajan con un extra de AccountId filtro.
Además, se menciona que la adición de sobrecargas que contiene AccountId sería una solución aceptable. Sin embargo, esto dejaría a las sobrecargas NetTiers existentes que no requieren un AccountId parámetro para cualquier consumidor DAL ...
De todos modos, aquí está un resumen de algunas de las áreas que tendría que mirar en la modificación:
-
Para asegurarse de que no hay consultas puede ejecutar con éxito sin proporcionar una AccountId (hay un montón de maneras de burlar la DAL por defecto a través de la cláusula
GetPaged @where
por ejemplo), es probable que tenga que hacer cambios en la capa de SQL. Estas plantillas se encuentran en las carpetas/DataAccessLayer.*Client/
. Suponiendo que está utilizando SQL Server, el archivo que genera el SQL/DataAccessLayer.SqlClient/
StoredProcedureProvider.cst
) podría ser modificado para asegurar un parámetro @AccountId siempre se pasa. -
Esto dará lugar a cambios en los archivos relacionados, tales como
/DataAccessLayer.SqlClient/SqlEntityProviderBase.generated.cst
y/DataAccessLayer/EntityProviderBaseCore.generated.cst
y probablemente/DataAccessLayer/EntityProviderBaseCoreClass.generated.cst
. -
Esto a su vez dará lugar a cambios en la capa de entidad (
/Entities/
) tales comoEntityBaseCore.generated.cst
yEntityInstanceBase.generated.cst
.
Mi consejo general es que mientras NetTiers y CodeSmith eran herramientas de elección para la construcción de DAL hace unos años, no podía recomiendo ir por este camino en estos días. Con la evolución del marco de la entidad de la Microsoft y de código abierto NHibernate, que en realidad no necesita meterse demasiado profundo en la capa de acceso a datos de fontanería más (aunque sólo sea a nivel de generación de código).