Pergunta

Estou usando o Entity Framework 4.0 para acessar dados em uma tabela com uma restrição de coluna exclusiva. Se a restrição for violada, ocorre uma exceção quando eu chamo SaveChanges (), como esperado. Minha pergunta é se devo permitir que a exceção seja lançada em primeiro lugar. Como alternativa, eu poderia fazer uma seleção para evitar a inserção dos dados duplicados (presumo que uma transação seja necessária).

Qual é a prática recomendada geralmente aceita nesse cenário?

Foi útil?

Solução

Evitar uma exceção geralmente é uma boa idéia - lançar uma exceção é uma operação bastante elaborada e de tempo e de recursos. Portanto, se você puder verificar facilmente se já existe um valor de chave exclusivo, eu provavelmente faria isso. Supondo que você tenha um índice exclusivo ou restrição única nessa coluna no nível do banco de dados, então (pelo menos para o SQL Server) já possui um índice nessa coluna, portanto, verificar um valor específico seria bastante simples e não teria um desempenho enorme impacto.

A outra pergunta é: com que frequência você acha que isso aconteceria? Uma vez por dia? Uma vez a cada duas semanas? Várias vezes por minuto? Se isso acontecer apenas com pouca frequência - uma vez na lua azul - eu não me incomodaria em tentar verificar primeiro - nesse caso, deixe a exceção acontecer e lidar com isso.

Então, acho que é realmente uma questão de quão caro é verificar primeiro e com que frequência isso acontece? Se você pode verificar com muita facilidade -> faça -o, por todos os meios! Mas se for uma operação bastante elaborada para verificar, e acontece apenas muito raramente, basta lidar com a exceção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top