visual transact test studio query online framework convert linq linq-to-sql

transact - linqpad sql to linq



RegeneraciĆ³n de clases de Linq a SQL (5)

He estado usando esta ingeniosa herramienta LINQ to SQL para una capa de acceso a datos en un proyecto asp.net. Sigo haciendo cambios en las tablas subyacentes y para que las clases de datos reconozcan el cambio, tengo que eliminar y leer la tabla que ha cambiado. ¿Hay algún atajo para regenerar la capa de datos?


En el pasado donde trabajé, creamos una clase contenedora para el DataContext que generó sqlmetal. Luego creamos una delgada capa de datos que mantuvo privado el DataContext y todas las clases generadas por sqlmetal.

Si alguna operación en el software necesitaba información de la base de datos, tenían que pasar por esta capa contenedora para obtenerla. En otras palabras, ningún LINQ to SQL podría aparecer fuera de esta capa de datos.

De esta forma, cada vez que tuvimos que regenerar clases a través de sqlmetal, solo partes de la capa de datos podrían romperse. Es mucho más fácil arreglar una capa donde está todo el código de acceso a los datos que cambiar las salpicaduras de LINQ a SQL a lo largo de su lógica o dominio de aplicación.


La versión 1 de LINQ to SQL no admite la detección de cambios en el esquema de la base de datos. La única forma de modificar las clases generadas es regenerarlas con el diseñador o SQLMetal.

Tenga en cuenta que no existen muchas diferencias entre SQLMetal y el diseñador, el diseñador es una interfaz de usuario más ''bonita'' para SQLMetal y oculta muchos de los conmutadores de línea de comando.

Uso el diseñador porque soy demasiado flojo para cargar constantemente el símbolo del sistema.

Además, asegúrese de no escribir ningún código propio en las clases generadas, de lo contrario lo perderá en una regeneración. Todas las clases generadas son parciales, lo que significa que puede agregar fácilmente sus propios extensores en un archivo separado.


Me he encontrado con este mismo problema y el uso de sqlmetal definitivamente es una buena manera de resolverlo. Un enfoque es crear un archivo por lotes que ejecute su comando sqlmetal y de esa manera puede ejecutar el lote cada vez que necesite actualizar sus clases de Linq a SQL, pero lo que es incluso una solución más inteligente es usar Herramientas de Visual Studio-> Herramientas externas para crea un comando en Visual Studio que ejecuta sqlmetal con tus parámetros. Esto funciona muy bien e incluso puede soltar el comando creado en su barra de herramientas para la reconstrucción con un solo clic.


Para situaciones / modelos en los que SQLMetal no termina, por ejemplo, debido a las diferentes convenciones de nomenclatura en la base de datos y su modelo, o algunas otras personalizaciones en su modelo L2S, tengo un complemento para Visual Studio que agrega comandos para sincronizar su L2S diseñador con la base de datos subyacente [esquema]. (más un montón de otras características relacionadas con L2S y EF)

Puede leer más sobre él, descargarlo y obtener una licencia de prueba de 30 días de http://www.huagati.com/dbmltools/


Puede usar sqlmetal, que es el generador de clases de línea de comandos para las clases de sqq a sql.