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

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

  • A partir de um banco de dados, gere o código-fonte e os atributos de mapeamento ou um arquivo de mapeamento.

  • A partir de um banco de dados, gere um arquivo intermediário de linguagem de marcação de banco de dados (.dbml) para personalização.

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

Esta ferramenta é instalada automaticamente com o Visual Studio 2019 e versões anteriores. Por padrão, o arquivo está localizado em %ProgramFiles%\Microsoft SDKs\Windows[version]\bin. Se você não instalar o Visual Studio, também poderá obter o arquivo SQLMetal baixando o SDK do Windows.

Nota

Os desenvolvedores que usam o Visual Studio também podem usar o Object Relational Designer para gerar classes de entidade. A abordagem de linha de comando é bem dimensionada para bancos de dados grandes. Como o SqlMetal é uma ferramenta de linha de comando, você pode usá-lo em um processo de compilação.

Para executar a ferramenta, use o Visual Studio Developer Command Prompt ou o Visual Studio Developer PowerShell. No prompt de comando, digite o seguinte comando:

sqlmetal [options] [<input file>]  

Opções

Para exibir a lista de opções mais atual, digite sqlmetal /? em um prompt de comando do local instalado.

Opções de conexão

Opção Description
/server: <nome> Especifica o nome do servidor de banco de dados.
/database: <nome> Especifica o catálogo do banco de dados no servidor.
/user: <nome> Especifica a ID do usuário de logon. Valor padrão: use a autenticação do Windows.
/password: <palavra-passe> Especifica a senha de logon. Valor padrão: use a autenticação do Windows.
/conn: <cadeia de conexão> Especifica a cadeia de conexão do banco de dados. Não pode ser usado com as opções /server, /database, /user ou /password .

Não inclua o nome do arquivo na cadeia de conexão. Em vez disso, adicione o nome do arquivo à linha de comando como o arquivo de entrada. Por exemplo, a linha a seguir especifica "c:\northwnd.mdf" como o arquivo de entrada: sqlmetal /code:"c:\northwind.cs" /language:csharp "c:\northwnd.mdf".
/timeout: <segundos> Especifica o valor de tempo limite quando o SqlMetal acessa o banco de dados. Valor padrão: 0 (ou seja, sem limite de tempo).

Opções de extração

Opção Description
/Modos de exibição Extrai exibições de banco de dados.
/funções Extrai funções de banco de dados.
/sprocs Extrai procedimentos armazenados.

Opções de saída

Opção Description
/dbml [:arquivo] Envia a saída como .dbml. Não pode ser usado com a opção /map .
/code [:arquivo] Envia a saída como código-fonte. Não pode ser usado com a opção /dbml .
/map [:arquivo] Gera um arquivo de mapeamento XML em vez de atributos. Não pode ser usado com a opção /dbml .

Diversos

Opção Description
/idioma: <idioma> Especifica a linguagem do código-fonte.

Idioma> válido<: vb, csharp.

Valor padrão: Derivado da extensão no nome do arquivo de código.
/namespace: <nome> Especifica o namespace do código gerado. Valor padrão: sem namespace.
/contexto: <tipo> Especifica o nome da classe de contexto de dados. Valor padrão: derivado do nome do banco de dados.
/entitybase: <tipo> Especifica a classe base das classes de entidade no código gerado. Valor padrão: as entidades não têm classe base.
/pluralizar Pluraliza ou singulariza automaticamente nomes de classe e membros.

Esta opção está disponível apenas na versão em inglês dos EUA.
/serialization: <opção> Gera classes serializáveis.

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

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

Arquivo de entrada

Opção Description
<arquivo de entrada> Especifica um arquivo do SQL Server Express .mdf, um arquivo .sdf do SQL Server Compact 3.5 ou um arquivo intermediário .dbml.

Observações

Na verdade, a funcionalidade SqlMetal envolve duas etapas:

  • Extraindo os metadados do banco de dados em um arquivo .dbml.

  • Gerando um arquivo de saída de código.

    Usando as opções de linha de comando apropriadas, você pode produzir código-fonte Visual Basic ou C# ou pode produzir um arquivo de mapeamento XML.

Para extrair os metadados de um arquivo .mdf, você deve especificar o nome do arquivo .mdf após todas as outras opções.

Se nenhum /server for especificado, localhost/sqlexpress será assumido.

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

  • SqlMetal tenta extrair um procedimento armazenado que se chama.

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

    O SqlMetal captura essa exceção e a relata como um aviso.

Para especificar um nome de arquivo de entrada, adicione o nome à linha de comando como o arquivo de entrada. Não há suporte para a inclusão do nome do arquivo na cadeia de conexão (usando a opção /conn ).

Exemplos

Gere um arquivo .dbml que inclua metadados SQL extraídos:

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

Gere um arquivo .dbml que inclua metadados SQL extraídos de um arquivo .mdf usando o SQL Server Express:

sqlmetal /dbml:mymeta.dbml mydbfile.mdf

Gere um arquivo .dbml que inclua metadados SQL extraídos do SQL Server Express:

sqlmetal /server:.\sqlexpress /dbml:mymeta.dbml /banco de dados:northwind

Gere o código-fonte a partir de um arquivo de metadados .dbml:

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

Gere o código-fonte diretamente a partir de metadados SQL:

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

Nota

Quando você usa a opção /pluralize com o banco de dados de exemplo Northwind, observe o seguinte comportamento. Quando o SqlMetal cria nomes de tipo de linha para tabelas, os nomes de tabela são singulares. Quando cria DataContext propriedades para tabelas, os nomes das tabelas são plurais. Coincidentemente, as tabelas no banco de dados de exemplo Northwind já são plurais. Portanto, você não vê essa parte funcionando. Embora seja prática comum nomear tabelas de banco de dados no singular, também é uma prática comum no .NET nomear coleções no plural.

Consulte também