Como: atribuir procedimentos armazenados para executar atualizações, inserções e exclusões (Object Relational Designer)

 

Publicado: agosto de 2016

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 para um banco de dados (por exemplo, ao chamar o método SubmitChanges).

Dica

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 para valores apropriados após a conclusão com êxito de operações INSERT ou UPDATE. Para obter mais informações, consulte Responsibilities of the Developer In Overriding Default Behavior.

Dica

O LINQ to SQL manipula automaticamente os valores gerados por banco de dados para colunas de identidade (incremento automático), rowguidcol (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, defina manualmente IsDbGenerated como true e AutoSync como um dos seguintes: Always, OnInsert ou OnUpdate.

Configurando 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 em tempo de execução pelo LINQ to SQL. O tempo de execução cria comandos padrão Insert, Update e Delete que se baseiam no esquema da tabela (as informações de coluna e chave primária). Quando o comportamento padrão não é desejado, você pode configurar o comportamento de atualização atribuindo procedimentos armazenados específicos para executar as inserções, atualizações e exclusões necessárias para manipular os dados na sua tabela. Você também pode fazer isso quando o comportamento padrão não é gerado, por exemplo, quando as classes de entidade são mapeadas para 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.

Dica

Seu computador pode mostrar diferentes nomes ou locais para alguns dos elementos de interface do usuário do Visual Studio nas instruções a seguir. A edição do Visual Studio que você possui e as configurações que você usa determinam esses elementos. Para obter mais informações, confira Personalizando 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/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, consulte DataContext Methods (O/R Designer).

  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 tempo de execução 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 de método originais (original _ArgumentName) para as propriedades originais (PropertyName (Original)) para os comandos Update e Delete.

    Dica

    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.

    Dica

    Você pode continuar a configurar o comportamento para cada combinação de classe/comportamento quando você clica em Aplicar depois de 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 tempo de execução para atualizações, clique nas reticências ao lado do comando Insert, Update ou Delete, na janela Propriedades, e selecione Usar tempo de execução na caixa de diálogo Configurar Comportamento.

Consulte também

LINQ to SQL Tools no Visual Studio
DataContext Methods (O/R Designer)
Walkthrough: Creating LINQ to SQL Classes (O/R Designer)
Instruções passo a passo: criando procedimentos armazenados atualizados para a tabela Clientes do Northwind
LINQ to SQL
Insert, Update, and Delete Operations