Código EF4 primeiro, TDD, CRUD e transações
No passado, escrevi testes de unidade para operações CRUD simples ao criar código de acesso / repositório de dados que se parece com isso:
using(var connection = new WhateverConnection(connectionString))
{
connection.Open();
using(var transaction = connection.BeginTransaction())
{
try
{
//test the CRUD operation
}
finally
{
//gets rid of any stuff created during the test
transaction.Rollback();
}
}
}
Hoje eu estava brincando com o Código EF4 primeiro e percebi que não fazia ideia de como esse cenário de teste se traduz no léxico do Entity Framework. Parece que, se eu ligarDbContext.SaveChanges()
, salvae confirma, independentemente de ser ou nãoAcceptAllChanges()
foi chamado. Mesmo usandoObjectContext
ao invés deDbContext
, Não consigo descobrir como esse cenário de teste simples pode ser recriado sem limpar manualmente quaisquer objetos de simulação / teste criados. Eu lieste artigo no MSDN, masTransactionScope
realmente não tem umRollback
Digite o método também. Eu usoTransactionScope
e nunca ligueComplete
? Existe outro método ou maneira de usar DbContext e / ou ObjectContext para reverter durante testes de unidade? Preciso reajustar completamente meu pensamento para TDD com o EF4 Code First?