Лучший способ - это транзакционный подход.Ссылка, которую я предоставил, содержит краткий обзор.Почти каждое корпоративное решение, с которым я сталкивался, использует транзакционный подход.Не забудьте также взглянуть на ссылки внизу статьи, в которых есть ссылки на документацию Microsoft по транзакциям с сущностью.Другие варианты, перечисленные выше, представляют собой избыточное соревнование в простой концепции очистки тестовой транзакции.Создание базы данных или использование нескольких моментальных снимков - это излишнее решение этой проблемы.TransactionScope даже не выполняет транзакцию, оставляя интеграционный тест незавершенным.
Реализация транзакций
Это создаст транзакцию перед началом каждого теста и откат транзакции после завершения каждого теста.
[TestClass]
public class TransactionTest
{
protected EntitiesV3 context;
protected DbContextTransaction transaction;
[AssemblyInitialize]
public static void AssemblyStart(TestContext testContext)
{
RetryDbConfiguration.SuspendExecutionStrategy = true;
}
[TestInitialize]
public void TransactionTestStart()
{
context = new EntitiesV3();
transaction = context.Database.BeginTransaction();
}
[TestCleanup]
public void TransactionTestEnd()
{
transaction.Rollback();
transaction.Dispose();
context.Dispose();
}
[AssemblyCleanup]
public static void AssemblyEnd()
{
RetryDbConfiguration.SuspendExecutionStrategy = false;
}
}
Отличный быстрый переход к подходу отката / очистки транзакций