я знаю, что этот вопрос довольно старый, но он может помочь кому-то, кто может / будет бороться с этим в будущем, как я только что делал ранее. так что если вы используете
- Entity Framework
- Nunit (v3)
код ниже не будет работать.
class A
{
private TransactionScope _trans;
[SetUp]
public void setup()
{
_trans = new TransactionScope();
}
[TearDown]
public void done()
{
if(_trans != null)
_trans.Dispose();
}
[Test]
public void doSomeDbWrite()
{
//your code to insert/update/delete data in db
}
}
Я пытался (и не работает) создавать TransactionScope перед созданием контекста БД или наоборот. Я думаю, что это как-то связано с самим EF, который, я полагаю, заключен в их собственных транзакциях или что-то в этом роде. я не копал глубже с этой стороны. в любом случае, вот как я это сделал с EF и транзакциями, чтобы убедиться, что ваша БД модульного теста чиста после того, как завершен модульный тест.
class A
{
private DbContext_DB;
private DbContextTransaction _trans;
[SetUp]
public void setup()
{
DB = new DbContext();//create your db context
_trans = DB.Database.BeginTransaction();
}
[TearDown]
public void done()
{
_trans.Rollback();
DB = null;
}
}
Надеюсь, это поможет другим, ищущим это сейчас: -)