Pergunta

O TransactionsCope é um recurso incrível, mas poucos fornecedores o implementam corretamente. Não quero passar a conexão como parâmetro.

Foi útil?

Solução

Não tenho certeza do que você queria alcançar usando o TransactionsCope aqui - se a idéia deve ter fluxo auotmático de transações entre os métodos (e um simples alistamento dentro da transação em andamento), passar a conexão como parâmetro não é a única maneira. Você pode passar a conexão e transação atuais usando a corrente Calcontext (ou thread atual). Coloque um invólucro estático simples que verifique se a conexão/transação existe no contexto atual da chamada e cria se não. Esta é uma maneira não intrusiva transparente, em oposição à passagem por parâmetro.

Agora, se você estiver olhando para transações fluidas entre os limites do domínio do aplicativo e/ou usando vários gerentes de recursos (ou seja, usando transações distribuídas), a melhor aposta seria usar o transactionscope e lançar Seu próprio ResourceManager. Claro, isso não é uma coisa trivial, mas é isso que o requisito implica. Se o sistema subjacente não fornecer recursos transacionais, o gerenciador de recursos personalizado poderá usar a transação de compensação para reverter (por exemplo, um gerente em uma parte superior do sistema de arquivos pode usar "Excluir pasta" como transação compensadora contra a transação original de "Create Pasta") .

Outras dicas

Talvez você esteja procurando Prevalência do sistema.

Basicamente, toda transação é diário (Os detalhes da transação são salvos) e, se o aplicativo travar e for reiniciado, você poderá pegar de onde parou ou reverter as alterações com base no estado do diário.

Aqui está um link para o Padrão de instantâneo Isso pode ajudá -lo a implementar a prevalência do sistema.

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