Share via


Responsabilidades do desenvolvedor em substituir o comportamento padrão

O LINQ to SQL não impõe os seguintes requisitos, mas o comportamento será indefinido se esses requisitos não forem atendidos.

  • Substituindo o método não deve chamar SubmitChanges ou Attach. O LINQ to SQL lançará uma exceção se esses métodos forem chamados em um método de substituição.

  • Substituir métodos não pode ser usado para começar, confirmar, ou parar uma transação. A operação de SubmitChanges é executada em uma transação. Uma transação aninhada interna pode interferir com a transação externo. Os métodos de substituição de carregamento podem iniciar uma transação somente após determinar que a operação não estiver sendo executada em Transaction.

  • Os métodos de substituição deverão seguir o mapeamento aplicável de concorrência otimista. O método de substituição é esperado lançar ChangeConflictException quando um conflito de simultaneidade otimista ocorre. O LINQ to SQL captura essa exceção para que você possa processar corretamente a opção SubmitChanges em SubmitChanges.

  • Crie (Insert) e métodos de substituição de Update são esperados fluir a voltar os valores para colunas base de dados - gerados correspondentes aos membros do objeto quando a operação é concluída com êxito.

    Por exemplo, se Order.OrderID for mapeado para uma coluna de identidade (chave primáriaautoincrement), o método de substituição InsertOrder() deverá recuperar a ID gerada pelo banco de dados e definir o membro Order.OrderID dessa ID. Também, os membros de carimbo de data/hora devem ser atualizados para valores base de dados - gerados de carimbo de data/hora para certificar-se que os objetos atualizados são consistentes. A falha propagar os valores base de dados - gerados pode causar uma inconsistência entre o base de dados e objetos controlados por DataContext.

  • É responsabilidade do usuário chamar a API dinâmico correto. Por exemplo, o método de substituição de atualização, somente ExecuteDynamicUpdate pode ser chamado. O LINQ to SQL não detecta nem verifica se o método dinâmico invocado corresponde à operação aplicável. Se um método inaplicável é chamado (por exemplo, ExecuteDynamicDelete para um objeto é atualizado), os resultados são indefinidos.

  • Finalmente, o método substituindo é esperado executar a operação indicada. A semântica das operações do LINQ to SQL, como carregamento adiantado, carregamento adiado e SubmitChanges) exigem as substituições para fornecer o serviço indicado. Por exemplo, uma substituição de carga que apenas retorna uma coleção vazia sem verificar o conteúdo no banco de dados provavelmente resultará em dados inconsistentes.

Confira também