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:
- Tenga SQLMetal y SQLMetalInclude (puede que tenga que descargar y compilar desde la fuente) accesible desde el directorio actual (o en la ruta)
- 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.
- Modificar, guardar y ejecutar el código de lote Generate.bat
- (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:
- 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ó)
- 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 '',''
- La última coma final es eliminada
- 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
- sqlmetal se ejecuta por segunda vez, esta vez generando el código .cs real basado en el archivo .dbml recortado.