SqlMetal.exe (Ferramenta de Geração de Código)

A ferramenta de linha de comandos SqlMetal gera código e mapeamento para o componente LINQ to SQL do .NET Framework. Ao aplicar opções que aparecem mais adiante neste tópico, pode instruir o SqlMetal para executar várias ações diferentes que incluem o seguinte:

  • A partir de uma base de dados, gere código fonte e atributos de mapeamento ou um ficheiro de mapeamento.

  • A partir de uma base de dados, gere um ficheiro de linguagem de markup de base de dados intermédia (.dbml) para personalização.

  • A partir de um ficheiro .dbml, gere atributos de código e mapeamento ou um ficheiro de mapeamento.

Esta ferramenta é instalada automaticamente com o Visual Studio 2019 e versões anteriores. Por predefinição, o ficheiro está localizado em %ProgramFiles%\Microsoft SDKs\Windows[versão]\bin. Se não instalar o Visual Studio, também pode obter o ficheiro SQLMetal ao transferir o SDK do Windows.

Nota

Os programadores que utilizam o Visual Studio também podem utilizar o Estruturador Relacional de Objetos para gerar classes de entidades. A abordagem da linha de comandos é dimensionada para bases de dados grandes. Uma vez que o SqlMetal é uma ferramenta de linha de comandos, pode utilizá-lo num processo de compilação.

Para executar a ferramenta, utilize a Linha de Comandos do Programador do Visual Studio ou o PowerShell para Programadores do Visual Studio. Na linha de comandos, introduza o seguinte comando:

sqlmetal [options] [<input file>]  

Opções

Para ver a lista de opções mais atual, escreva sqlmetal /? numa linha de comandos a partir da localização instalada.

Opções de Ligação

Opção Descrição
/server:<name> Especifica o nome do servidor da base de dados.
/database:<name> Especifica o catálogo de bases de dados no servidor.
/user:<name> Especifica o ID de utilizador de início de sessão. Valor predefinido: utilize a autenticação do Windows.
/password:<password> Especifica a palavra-passe de início de sessão. Valor predefinido: utilize a autenticação do Windows.
/conn:<cadeia de> ligação Especifica a cadeia de ligação da base de dados. Não é possível utilizar as opções /server, /database, /user ou /password .

Não inclua o nome do ficheiro na cadeia de ligação. Em vez disso, adicione o nome do ficheiro à linha de comandos como o ficheiro de entrada. Por exemplo, a seguinte linha especifica "c:\northwnd.mdf" como o ficheiro de entrada: sqlmetal /code:"c:\northwind.cs" /language:csharp "c:\northwnd.mdf".
/timeout:<seconds> Especifica o valor de tempo limite quando o SqlMetal acede à base de dados. Valor predefinido: 0 (ou seja, sem limite de tempo).

Opções de extração

Opção Descrição
/views Extrai vistas de base de dados.
/functions Extrai funções de base de dados.
/sprocs Extrai os procedimentos armazenados.

Opções de saída

Opção Descrição
/dbml[:file] Envia a saída como .dbml. Não é possível utilizar com a opção /map .
/code[:file] Envia a saída como código fonte. Não é possível utilizar com a opção /dbml .
/map[:file] Gera um ficheiro de mapeamento XML em vez de atributos. Não é possível utilizar com a opção /dbml .

Diversos

Opção Descrição
/language:<language> Especifica o idioma do código fonte.

Idioma> válido<: vb, csharp.

Valor predefinido: derivado da extensão no nome do ficheiro de código.
/namespace:<name> Especifica o espaço de nomes do código gerado. Valor predefinido: sem espaço de nomes.
/context:<type> Especifica o nome da classe de contexto de dados. Valor predefinido: derivado do nome da base de dados.
/entitybase:<type> Especifica a classe base das classes de entidade no código gerado. Valor predefinido: as entidades não têm classe base.
/pluralizar Pluraliza ou singulariza automaticamente nomes de classes e membros.

Esta opção só está disponível na versão em inglês dos E.U.A.
/serialização:<opção> Gera classes serializáveis.

Opção> válida<: Nenhuma, Unidirecional. Valor predefinido: Nenhum.

Para obter mais informações, veja Serialização.

Ficheiro de Entrada

Opção Descrição
<ficheiro de entrada> Especifica um ficheiro .mdf SQL Server Express, um SQL Server Compact ficheiro .sdf 3.5 ou um ficheiro intermédio .dbml.

Observações

A funcionalidade SqlMetal envolve, na verdade, dois passos:

  • Extrair os metadados da base de dados para um ficheiro .dbml.

  • Gerar um ficheiro de saída de código.

    Ao utilizar as opções de linha de comandos adequadas, pode produzir código fonte Visual Basic ou C# ou produzir um ficheiro de mapeamento XML.

Para extrair os metadados de um ficheiro .mdf, tem de especificar o nome do ficheiro .mdf após todas as outras opções.

Se não for especificado nenhum /server , é assumido localhost/sqlexpress .

O Microsoft SQL Server 2005 abre uma exceção se uma ou mais das seguintes condições forem verdadeiras:

  • O SqlMetal tenta extrair um procedimento armazenado que se chama a si próprio.

  • O nível de aninhamento de um procedimento armazenado, função ou vista excede 32.

    O SqlMetal apanha esta exceção e comunica-a como um aviso.

Para especificar um nome de ficheiro de entrada, adicione o nome à linha de comandos como o ficheiro de entrada. A inclusão do nome do ficheiro na cadeia de ligação (com a opção /conn ) não é suportada.

Exemplos

Gerar um ficheiro .dbml que inclua metadados SQL extraídos:

sqlmetal /server:myserver /database:northwind /dbml:mymeta.dbml

Gere um ficheiro .dbml que inclua metadados SQL extraídos de um ficheiro .mdf com SQL Server Express:

sqlmetal /dbml:mymeta.dbml mydbfile.mdf

Gerar um ficheiro .dbml que inclua metadados SQL extraídos de SQL Server Express:

sqlmetal /server:.\sqlexpress /dbml:mymeta.dbml /database:northwind

Gerar código fonte a partir de um ficheiro de metadados .dbml:

sqlmetal /namespace:nwind /code:nwind.cs /language:csharp mymetal.dbml

Gerar código fonte a partir de metadados SQL diretamente:

sqlmetal /server:myserver /database:northwind /namespace:nwind /code:nwind.cs /language:csharp

Nota

Quando utilizar a opção /pluralize com a base de dados de exemplo Northwind, tenha em atenção o seguinte comportamento. Quando o SqlMetal cria nomes de tipo de linha para tabelas, os nomes das tabelas são singulares. Quando cria DataContext propriedades para tabelas, os nomes das tabelas são plural. Por coincidência, as tabelas na base de dados de exemplo northwind já são plural. Por conseguinte, não verá essa parte a funcionar. Embora seja prática comum atribuir um nome singular às tabelas de bases de dados, é também uma prática comum no .NET atribuir nomes a coleções plural.

Ver também