¿Cómo actualizo un archivo .dbml de Linq a SQL?
¿Cómo actualizo un archivo .dbml de Linq a SQL?
Respuestas:
Hay tres formas de mantener el modelo sincronizado.
Elimine las tablas modificadas del diseñador y arrástrelas nuevamente a la superficie del diseñador desde el Explorador de la base de datos. He descubierto que, para que esto funcione de manera confiable, debe:
a. Actualice el esquema de la base de datos en el Explorador de la base de datos (haga clic con el botón derecho, actualice)
b. Guarde el diseñador después de eliminar las tablas
c. Guarde nuevamente después de arrastrar las tablas hacia atrás.
Sin embargo, tenga en cuenta que si ha modificado alguna propiedad (por ejemplo, desactivando la propiedad secundaria de una asociación), obviamente perderá esas modificaciones; tendrá que volver a hacerlas.
Use SQLMetal para regenerar el esquema de su base de datos. He visto varias publicaciones de blog que muestran cómo escribir esto .
Realice cambios directamente en el panel Propiedades del DBML. Esto funciona para cambios simples, como permitir nulos en un campo.
El diseñador DBML no está instalado de forma predeterminada en Visual Studio 2015, 2017 o 2019. Tendrá que cerrar VS, iniciar el instalador de VS y modificar su instalación. Las herramientas LINQ to SQL son la característica que debe instalar. Para VS 2017/2019, puede encontrarlo en Componentes individuales> Herramientas de código .
Para actualizar una tabla en su diagrama .dbml con, por ejemplo, columnas agregadas, haga esto:
También puede consultar el conjunto de plantillas de generación de código PLINQO , basado en CodeSmith, que le permite hacer muchas cosas interesantes para y con Linq-to-SQL:
Visite el sitio PLINQO en http://www.plinqo.com y eche un vistazo a los videos de introducción.
La segunda herramienta que conozco son las herramientas Huagati DBML / EDMX , que permiten la actualización de archivos de mapeo DBML (Linq-to-SQL) y EDMX (Entity Framework) y más (como convenciones de nomenclatura, etc.).
Bagazo
Usamos una plantilla T4 escrita personalizada que consulta dinámicamente el modelo de información_esquema para cada tabla en todos nuestros archivos .DBML, y luego sobrescribe partes del archivo .DBML con información de esquema fresca de la base de datos. Yo altamenterecomiendo implementar una solución como esta: me ha ahorrado muchísimo tiempo y, a diferencia de eliminar y volver a agregar sus tablas a su modelo, puede mantener sus asociaciones. Con esta solución, obtendrá errores en tiempo de compilación cuando cambie su esquema. Sin embargo, debe asegurarse de que está utilizando un sistema de control de versiones, porque la diferenciación es realmente útil. Esta es una gran solución que funciona bien si está desarrollando con un primer enfoque de esquema de base de datos. Por supuesto, no puedo compartir el código de mi compañía, así que usted es el único responsable de escribir esto. Pero si conoce algo de Linq-to-XML y puede ir a la escuela en este proyecto , puede llegar a donde quiere estar.
Recomendaría usar el diseñador visual integrado en VS2008, ya que la actualización de dbml también actualiza el código que se genera para usted. Si modifica el dbml fuera del diseñador visual, el código subyacente no estará sincronizado.
Hay un matiz en actualizar las tablas y luego actualizar el DBML ... Las relaciones de clave externa no siempre se traen de inmediato si se realizan cambios en las tablas existentes. La solución consiste en hacer una compilación del proyecto y luego volver a agregar las tablas nuevamente. Informé esto a MS y se está arreglando para VS2010.
La pantalla DBML no muestra nuevas restricciones de clave externa
Tenga en cuenta que las instrucciones dadas en la respuesta principal no son claras. Para actualizar la tabla.
En el caso de la actualización del procedimiento almacenado, debe eliminarlo del archivo .dbml y volver a insertarlo. Pero si el procedimiento almacenado tiene dos rutas (por ejemplo: si hay algo; muestra algunas columnas; de lo contrario, muestra otras columnas), ¡asegúrate de que las dos rutas tengan los mismos alias de columnas! De lo contrario, solo existirán las primeras columnas de ruta.
Aquí está el método completo paso a paso que me funcionó para actualizar LINQ to SQL dbml y los archivos asociados para incluir una nueva columna que agregué a una de las tablas de la base de datos.
Debe realizar los cambios en su superficie de diseño como lo sugiere otro anterior; Sin embargo, debe hacer algunos pasos adicionales. Estos son los pasos completos:
1. Drag your updated table from Server Explorer onto the design surface
2. Copy the new column from this "new" table to the "old" table (see M463 answer for details on this step)
3. Delete the "new" table that you just dragged over
4. Click and highlight the stored procedure, then delete it
5. Drag the new stored procedure and drop into place.
6. Delete the .designer.vb file in the code-behind of the .dbml
(if you do not delete this, your code-behind containing the schema will
not update even if you rebuild and the new table field will not be included)
7. Clean and Rebuild the solution (this will rebuild the .designer.vb file to include all the new changes!).