visual-studio linq-to-sql sqlmetal

visual studio - SQL Metal para tablas específicas u otra forma de actualizar/agregar tablas al archivo.dbml



visual-studio linq-to-sql (3)

Alguien tiene alguna manera fácil de hacer esto en Visual Studio, sin tener que usar el Explorador de servidores?

Intenté también mirar macro, pero solo grabé

Sub TemporaryMacro() End Sub

Entonces no hay suerte allí.

¿Alguna forma de guionar esto?


Existe una buena utilidad que le ayuda a actualizar sus archivos DBML existentes desde la base de datos: herramientas Huagati DBML / EDMX .

No es gratis, pero vale la inversión para cualquier desarrollo serio de Linq a SQL.

La única alternativa sería escribirlo usted mismo: lea la estructura de la base de datos y compárela con la representación XML en DBML, y actualice DBML según sea necesario.


SqlMetal Include funcionó como un encanto para mí. Primero crea un archivo dbml completo usando SqlMeta - Say testComplete.dbml

Ahora proporcione este archivo como una entrada a SqlMetaInclude SqlMetalInclude /dbml:"testComplete.dbml "/output:"testSubSet.dbml" /include:dbo.SampleTable1=SampleTable1,dbo.SampleTable2=SampleTable2

Tenga en cuenta que esta herramienta tiene una GUI incluida que puede manejar el proceso completo.


Estoy usando un script por lotes similar a este para administrar la actualización de mis modelos cuando cambian las tablas / vistas subyacentes. Para usarlo:

  1. Tenga SQLMetal y SQLMetalInclude (puede que tenga que descargar y compilar desde la fuente) accesible desde el directorio actual (o en la ruta)
  2. Cree un archivo "selectedEntities.txt" con un nombre de tabla / vista en cada línea. Estas tablas serán las únicas para las que se genera el código.
  3. Modificar, guardar y ejecutar el código de lote Generate.bat
  4. (Opcional) Agregue el archivo .bat como una herramienta de ejecución externa a Visual Studio, como se explica aquí

Generate.bat:

sqlmetal /conn:"Data Source={Hostname};Initial Catalog={DBName};User ID={Username};Password={Password}" /dbml:temp.dbml /views setlocal EnableDelayedExpansion set file=chosenEntities.txt set include= FOR /F %%i IN (%file%) DO ( set include=!include!%%i, ) set include=%include:~0,-1% sqlmetalinclude -dbml:temp.dbml -output:ChosenEntities.dbml -include:%include% sqlmetal /context:CustomDataContext /pluralize /namespace:MyNamespace.DB /language:csharp /code:DBEntities.cs /entitybase:DBEntityBase ChosenEntities.dbml

Ejemplo de ChooseEntities.txt:

Accounts Customers PRODUCTS_VIEW AnotherTable

Explicación:

  1. El archivo .dbml intermedio es generado por sqlmetal como de costumbre. El archivo dbml creado contiene las definiciones para cada tabla en la base de datos (y vistas, si se seleccionó)
  2. El siguiente bloque de código recorre selectedEntities.txt, y para cada línea agrega los contenidos de la línea (nombre de la tabla) más una coma '',''
  3. La última coma final es eliminada
  4. Ejecute sqlmetalinclude, que básicamente hace una copia del archivo temp.dbml original, pero solo incluye las tablas que especificó. Hay otras opciones disponibles, como transformar los nombres de las tablas individuales
  5. sqlmetal se ejecuta por segunda vez, esta vez generando el código .cs real basado en el archivo .dbml recortado.