Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 23237|Resposta: 1

[Fonte] Submissão em massa e processamento de transações no Entity Framework

[Copiar link]
Publicado em 08/04/2017 22:10:01 | | |

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.




Anterior:O EF6 usa o Database.BeginTransaction para gerenciar transações
Próximo:Tutoriais da série EF ORM Development and Use
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com