¿Cómo actualizo un archivo Linq a SQL dbml?


Cómo actualizo un Linq a SQL .archivo dbml?

 182
Author: Michael Myers, 2009-07-10

7 answers

Hay tres maneras de mantener el modelo sincronizado.

  1. Elimine las tablas modificadas del diseñador y arrástrelas a la superficie del diseñador desde el Explorador de bases de datos. He encontrado que, para que esto funcione de manera confiable, usted tiene que:

    A. Actualizar el esquema de la base de datos en el Explorador de bases de datos (haga clic con el botón derecho, actualizar)
    b. Guarde el diseñador después de eliminar las tablas
    c. Guardar de nuevo después de arrastrar las tablas de nuevo.

    Tenga en cuenta aunque que si ha modificado cualquier propiedad (por ejemplo, desactivando la propiedad hija de una asociación), esto obviamente perderá esas modificaciones - tendrá que hacerlas de nuevo.

  2. Utilice SqlMetal para regenerar el esquema de su base de datos. He visto una serie de entradas de blog que muestran cómo escribir esto.

  3. Realice los cambios directamente en el panel Propiedades de DBML. Esto funciona para cambios simples, como permitir nulos en un campo.

El diseñador de DBML no se instala de forma predeterminada en Visual Studio 2015 o Visual Studio 2017. Tendrá que cerrar VS, iniciar el instalador VS y modificar su instalación. El LINQ to SQL tools es la característica que debe instalar.

 232
Author: Robert Harvey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-23 05:27:08

Para actualizar una tabla en su .dbml-diagram with, for example, added columns, do this:

  1. Actualice la ventana del explorador de SQL Server.
  2. Arrastre la versión "nueva" de su tabla al .dbml-diagrama (report1 en la imagen de abajo).

informe1 es la nueva versión de la tabla

  1. Marque las columnas agregadas en la nueva versión de la tabla, presione Ctrl+C para copiar las columnas añadidas.

copiar las columnas añadidas

  1. Haga clic en la versión "antigua" de su tabla y pulse Ctrl+V para pegar las columnas agregadas en la versión actual de la tabla.

pegue las columnas agregadas a la versión anterior de la tabla

 35
Author: M463,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-02 15:16:17

También puede consultar el conjunto de plantillas de generación de código PLINQO, basadas en CodeSmith, que le permiten hacer muchas cosas interesantes para y con Linq-to-SQL:

  • generar un archivo por clase (en lugar de un único archivo enorme)
  • actualice su modelo según sea necesario
  • muchas más características

Echa un vistazo al sitio de PLINQO en http://www.plinqo.com y echa un vistazo a los videos introductorios.

La segunda herramienta que conozco son los Herramientas DBML / EDMX tools, que permiten actualizar archivos de asignación de DBML (Linq-to-SQL) y EDMX (Entity Framework), y más (como convenciones de nombres, etc.).

Marc

 5
Author: marc_s,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-10 16:08:45

Utilizamos una plantilla T4 escrita personalizada que consulta dinámicamente el modelo information_schema para cada tabla en todos nuestros .Archivos DBML, y luego sobrescribe partes de la .Archivo DBML con información de esquema nueva de la base de datos. Yo altamente recomiendo implementar una solución como esta - me ha ahorrado montones de 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 diferencia 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 estás por tu cuenta para escribir esto tú mismo. Pero si conoces algo de Linq-to-XML y puedes ir a la escuela en este proyecto, puedes llegar a donde quieras estar.

 4
Author: mattmc3,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-28 13:49:35

Recomiendo 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. Modificar el dbml fuera del diseñador visual resultaría en que el código subyacente no estuviera sincronizado.

 2
Author: Jason Miesionczek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-10 15:20:31

Hay un matiz para actualizar las tablas y luego actualizar el DBML... Las relaciones de clave foránea no siempre se traen inmediatamente si se realizan cambios en las tablas existentes. El trabajo es hacer una compilación del proyecto y luego volver a agregar las tablas de nuevo. Informé de 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 el tabla

  1. Abra la superficie de diseño dbml
  2. Seleccione todas las tablas con el botón derecho->Clic - > Seleccionar Todo o CTRLa
  3. CTRLx (Cut)
  4. CTRLv (Pegar)
  5. Guardar y reconstruir la solución.
 2
Author: ΩmegaMan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-14 12:29:17

En el caso de la actualización del procedimiento almacenado, debe eliminarlo del .archivo dbml y vuelva a insertarlo. Pero si el procedimiento almacenado tiene dos rutas (por ejemplo: si algo; mostrar algunas columnas; de lo contrario mostrar algunas otras columnas), asegúrese de que las dos rutas tienen los mismos alias de columnas!!! De lo contrario, solo existirán las primeras columnas de ruta.

 0
Author: Yasser Hosny Abu Elmakarem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-04 21:02:57