Oi Vanessa!
Agora estou vendo que a minha resposta lá em cima não estava completa. Na verdade, o EF já cria uma transação automaticamente.
Em todas as versões do Entity Framework, sempre que você executa SaveChanges()
para inserir, atualizar ou excluir no banco de dados, o framework
envolve aquela operação numa transação. Essa transação dura somente o tempo necessário para executar a operação e então a complete.
Quando você executa outra operação, uma nova transação é iniciada.
Ou seja, para o exemplo que coloquei lá em cima, não seria necessário eu criar uma transação explicitamente: o EF cuidaria de tudo automaticamente.
O uso de SqlTransaction no EF é mais indicado para situações em que uma das operações é feita "por fora" das entidades, como num comando UPDATE direto no banco de dados, por exemplo:
https://msdn.microsoft.com/en-us/library/dn456843(v=vs.113).aspx
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Linq;
using System.Transactions;
namespace TransactionsExamples
{
class TransactionsExample
{
static void StartOwnTransactionWithinContext()
{
using (var context = new BloggingContext())
{
using (var dbContextTransaction = context.Database.BeginTransaction())
{
try
{
context.Database.ExecuteSqlCommand(
@"UPDATE Blogs SET Rating = 5" +
" WHERE Name LIKE '%Entity Framework%'"
);
var query = context.Posts.Where(p => p.Blog.Rating >= 5);
foreach (var post in query)
{
post.Title += "[Cool Blog]";
}
context.SaveChanges();
dbContextTransaction.Commit();
}
catch (Exception)
{
dbContextTransaction.Rollback();
}
}
}
}
}
}
Nesse exemplo de cima, temos um bom uso do SQLTransaction
!
Agora, existe um outro tipo de transação, com o objeto TransactionScope
, que é mais indicado para operações entre diferentes servidores SQL Server, por exemplo. O uso de diferentes servidores numa transação exige o MSDTC (Microsoft Distributed Transaction Coordinator, ou Coordenador de Transações Distribuídas).
https://msdn.microsoft.com/pt-br/library/system.transactions.transactionscope(v=vs.110).aspx
Boa sorte e bons estudos!