En mi investigación sobre la reversión de transacciones en EF4, parece que todos se refieren a this blog post u ofrecen una explicación similar. En mi caso, quiero hacer esto en un escenario de pruebas unitarias donde quiero deshacer prácticamente todo lo que hago dentro del contexto de prueba de mi unidad para evitar actualizar los datos en la base de datos (sí, vamos a incrementar los contadores pero está bien) Para hacer esto, ¿es mejor seguir el siguiente plan? ¿Me estoy perdiendo algún concepto o algo más importante con esto (aparte de mis funciones SetupMyTest
y PerformMyTest
no existirán realmente de esa manera)?¿Cómo deshacerse en EF4 para Unit Test TearDown?
[TestMethod]
public void Foo
{
using (var ts = new TransactionScope())
{
// Arrange
SetupMyTest(context);
// Act
PerformMyTest(context);
var numberOfChanges = context.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
// if there's an issue, chances are that an exception has been thrown by now.
// Assert
Assert.IsTrue(numberOfChanges > 0, "Failed to _____");
// transaction will rollback because we do not ever call Complete on it
}
}
Hmm, en EF4, al parecer, la sobrecarga SaveChanges (falsa) ha quedado en desuso. Parece que SaveChanges (SaveOptions.AcceptAllChangesAfterSave) es el reemplazo, así que estoy haciendo esa actualización en mi pregunta original. – Jaxidian