O uso de SaveChanges() no Entity Framework é muito frequente, e chamar SaveChanges() após uma única modificação ou exclusão de dados retorna o número de registros de impacto.
Para usar modificação em lote ou exclusão em lote de dados, você precisa do método SaveChanges(false)+AcceptAllChanges().
SaveChanges(false) é apenas uma notificação de que o EF precisa realizar uma operação no banco de dados, que está pendente na memória e pode ser desfeita quando necessário, como quando o commit do AcceptAllChange() for realmente bem-sucedido, e o EF desfaça a operação do SaveChanges (false).
Ao lidar com operações de transação distribuídas, é necessário usar o TransactionScope para lidar com isso, e muitas vezes escrevemos assim:
Mas escrever assim é arriscado, falso Por exemplo, contexto1. SaveChanges() foi bem-sucedido, context2. SaveChanges() é problemático, estamos dentro do escopo. Complete() termina quando a transação for confirmada e o Context1 for executado com sucesso
(Na minha prática, o que foi dito acima pode ser revertido normalmente, se contexto1. SaveChanges() foi bem-sucedido, context2. SaveChanges() é problemático, nenhum dos dois será executado com sucesso! Faça referência ao namespace Using System.Transaction no seu projeto. Definir um TransactionScope no uso é equivalente a definir um escopo das coisas, ou seja, o escopo dessa transação está dentro do uso. No escopo de uso, se não houver escopo. Complete (), então o escopo reverte automaticamente todas as operações quando destruído. ) Isso pode não necessariamente atender às nossas necessidades. Se precisarmos que context1 e context2 sejam executados com sucesso ao mesmo tempo, ou se nenhum dos dois tiver sucesso, precisamos fazer pequenos ajustes no código, como usar o seguinte código:
Usamos o SaveChanges(false) para enviar primeiro os comandos necessários de operação de banco de dados para o banco de dados, o que é observar que context1 e context2 realmente não mudaram; se a transação for encerrada e revertida automaticamente, nenhuma das alterações é realmente comprometida no banco de dados, então pode ser revertida com sucesso.
|