Entity Framework - Transação
Em todas as versões do Entity Framework, sempre que você executa SaveChanges()para inserir, atualizar ou excluir o banco de dados, o framework envolverá essa operação em uma transação. Quando você invoca SaveChanges, o contexto inicia automaticamente uma transação e a confirma ou reverte, dependendo se a persistência foi bem-sucedida.
Tudo isso é transparente para você e você nunca precisará lidar com isso.
Esta transação dura apenas o suficiente para executar a operação e então é concluída.
Quando você executa outra operação, uma nova transação é iniciada.
Entity Framework 6 fornece o seguinte -
Database.BeginTransaction ()
É um método simples e fácil dentro de um DbContext existente para iniciar e concluir transações para usuários.
Ele permite que várias operações sejam combinadas na mesma transação e, portanto, todas são confirmadas ou todas são revertidas como uma.
Também permite que o usuário especifique mais facilmente o nível de isolamento da transação.
Database.UseTransaction ()
Ele permite que o DbContext use uma transação, que foi iniciada fora do Entity Framework.
Vamos dar uma olhada no exemplo a seguir, onde várias operações são realizadas em uma única transação. O código é como -
class Program {
static void Main(string[] args) {
using (var context = new UniContextEntities()) {
using (var dbContextTransaction = context.Database.BeginTransaction()) {
try {
Student student = new Student() {
ID = 200,
FirstMidName = "Ali",
LastName = "Khan",
EnrollmentDate = DateTime.Parse("2015-12-1")
};
context.Students.Add(student);
context.Database.ExecuteSqlCommand(@"UPDATE Course SET Title =
'Calculus'" + "WHERE CourseID = 1045");
var query = context.Courses.Where(c ⇒ c.CourseID == 1045);
foreach (var item in query) {
Console.WriteLine(item.CourseID.ToString()
+ " " + item.Title + " " + item.Credits);
}
context.SaveChanges();
var query1 = context.Students.Where(s ⇒ s.ID == 200);
foreach (var item in query1) {
Console.WriteLine(item.ID.ToString()
+ " " + item.FirstMidName + " " + item.LastName);
}
dbContextTransaction.Commit();
} catch (Exception) {
dbContextTransaction.Rollback();
}
}
}
}
}
O início de uma transação requer que a conexão da loja subjacente esteja aberta.
Portanto, chamar Database.BeginTransaction () abrirá a conexão, se ainda não estiver aberta.
Se DbContextTransaction abriu a conexão, ele a fechará quando Dispose () for chamado.