Compartilhar via


Responsabilidades do desenvolvedor na substituição do comportamento padrão

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

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

  • Os métodos de substituição não podem ser usados para iniciar, confirmar ou interromper uma transação. A SubmitChanges operação é realizada dentro de 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 fornecida em SubmitChanges.

  • Espera-se que os métodos create (Insert) e Update override retornem os valores das colunas geradas pelo banco de dados para os membros do objeto correspondentes quando a operação for concluída com êxito.

    Por exemplo, se Order.OrderID for mapeado para uma coluna de identidade (chave primária autoincremento), então o método de substituição InsertOrder() deve recuperar a ID gerada pelo banco de dados e atribuir essa ID ao membro Order.OrderID. 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 na propagação dos valores gerados pelo banco de dados pode causar uma inconsistência entre o banco de dados e os objetos rastreados pelo DataContext.

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

  • Por fim, espera-se que o método de substituição execute a operação declarada. A semântica das operações LINQ to SQL, como o carregamento ansioso, o carregamento adiado e SubmitChanges) requer que as substituições forneçam o serviço especificado. Por exemplo, uma substituição de carga que retorna apenas uma coleção vazia sem verificar o conteúdo no banco de dados provavelmente levará a dados inconsistentes.

Consulte também