Atribuir procedimentos armazenados para executar atualizações, inserções e exclusões (Designer Relacional de Objetos)

Os procedimentos armazenados podem ser adicionados ao Designer Relacional de Objetos e executados como métodos típicos do DataContext. Eles também podem ser usados para substituir o comportamento padrão em tempo de execução do LINQ to SQL que executa inserções, atualizações e exclusões quando alterações são salvas de classes de entidade em um banco de dados (por exemplo, ao chamar o método SubmitChanges).

Observação

Se seu procedimento armazenado retornar valores que precisem ser reenviados ao cliente (por exemplo, valores calculados no procedimento armazenado), crie parâmetros de saída em seus procedimentos armazenados. Se você não pode usar parâmetros de saída, escreva uma implementação de método parcial em vez de depender das substituições geradas pelo Designer Relacional de Objetos. Os membros mapeados para os valores gerados por banco de dados precisam ser definidos com valores adequados após a conclusão bem-sucedida de operações INSERT ou UPDATE. Para obter mais informações, consulte Responsabilidades do desenvolvedor em substituir o comportamento padrão.

Observação

O LINQ to SQL manipula automaticamente valores gerados por banco de dados para colunas de identidade (incremento automático), rowguidcol (identificador global exclusivo [GUID] gerado por banco de dados) e carimbo de data/hora. Os valores gerados pelo banco de dados em outros tipos de coluna resultarão inesperadamente em um valor nulo. Para retornar os valores gerados por banco de dados, você deve definir manualmente IsDbGenerated como true e AutoSync como um dos seguintes: AutoSync.Always, AutoSync.OnInsert ou AutoSync.OnUpdate.

Configurar o comportamento de atualização de uma classe de entidade

Por padrão, a lógica para atualizar um banco de dados (inserções, atualizações e exclusões) com alterações que foram feitas nos dados em classes de entidade LINQ to SQL, é fornecida pelo runtime do LINQ to SQL. O runtime cria comandos INSERT, UPDATE e DELETE padrão que se baseiam no esquema da tabela (as informações de coluna e chave primária). Quando o comportamento padrão não é o desejado, você pode configurar o comportamento de atualização atribuindo procedimentos armazenados específicos para executar as inserções, as atualizações e as exclusões necessárias para manipular os dados em sua tabela. Você também pode fazer isso quando o comportamento padrão não é gerado, por exemplo, quando as classes de entidade mapeiam para as exibições. Finalmente, você pode substituir o comportamento de atualização padrão quando o banco de dados exige o acesso à tabela através de procedimentos armazenados.

Observação

Seu computador pode mostrar diferentes nomes ou locais para alguns dos elementos de interface do usuário do Visual Studio neste artigo. Você pode estar usando outra edição do Visual Studio ou outras configurações de ambiente. Para obter mais informações, confira Personalizar o IDE.

Para atribuir procedimentos armazenados para substituir o comportamento padrão de uma classe de entidade

  1. Abra o arquivo LINQ to SQL no designer. (Clique duas vezes no arquivo .dbml no Gerenciador de Soluções.)

  2. Em Gerenciador de Servidores ou Gerenciador de Banco de Dados, expanda Procedimentos Armazenados e localize os procedimentos armazenados a serem usados com os comandos Insert, Update e/ou Delete da classe de entidade.

  3. Arraste o procedimento armazenado para o Designer Relacional de Objetos.

    O procedimento armazenado é adicionado ao painel de métodos como um método DataContext. Para obter mais informações, confira Métodos DataContext (Designer Relacional de Objetos).

  4. Selecione a classe de entidade para a qual você deseja usar o procedimento armazenado para executar atualizações.

  5. Na janela Propriedades, selecione o comando a ser substituído (Insert, Update ou Delete).

  6. Clique nas reticências (...) ao lado das palavras Usar Runtime para abrir a caixa de diálogo Configurar Comportamento.

  7. Selecione Personalizar.

  8. Selecione o procedimento armazenado desejado na lista Personalizar.

  9. Inspecione a lista de Argumentos de Método e de Propriedades de Classe para verificar se Argumentos de Método é mapeado para Propriedades de Classe apropriado. Mapeie os argumentos originais do método (Original_<ArgumentName>) para as propriedades originais (<PropertyName> (Original)) para os comandos Update e Delete.

    Observação

    Por padrão, os argumentos do método são mapeados para as propriedades de classe quando os nomes coincidem. Se os nomes de propriedade forem modificados, não haverá mais correspondência entre a tabela e a classe de entidade. Talvez seja necessário selecionar a propriedade de classe equivalente para mapeamento se o designer não puder determinar o mapeamento correto.

  10. Clique em OK ou em Aplicar.

    Observação

    Você poderá continuar configurando o comportamento de cada combinação de classe e comportamento desde que clique em Aplicar depois de fazer cada alteração. Se você alterar a classe ou o comportamento antes de clicar em Aplicar, uma caixa de diálogo de aviso com uma oportunidade de aplicar as alterações será exibida.

Para voltar a usar a lógica padrão em runtime para atualizações, clique nas reticências ao lado do comando Insert, Update ou Delete, na janela Propriedades, e selecione Usar runtime na caixa de diálogo Configurar Comportamento.