Как удалить все таблицы через Entity framework, при этом не перечисляя наименования таблиц (или сущностей)?

226
21 мая 2021, 10:00

У меня есть следующий код юнит-теста.

public class NewTest
{
    private ApplicationContext context;
    private IMigrator migrator;
    [SetUp]
    public void Setup()
    {
        IConfiguration configuration =
            new ConfigurationBuilder().AddJsonFile("appsettings.Tests.json", false).Build();
        context = new ApplicationContext(configuration);
        migrator = context.GetService<IMigrator>();
        migrator.Migrate();
    }
    [Test]
    public void Can_Create_Workspace()
    {
        // как то удалить абсолютно все таблицы из тестовой базы
        // выполнить миграции
        migrator.Migrate();
        // далее код теста
    }
}

Для моих юнит-тестов я планирую развернуть в докере отдельную базу. В методе Setup происходит настройка: создается подключение к базе, выполняются миграции. Далее план такой. В каждом тесте мне хотелось бы удалить все таблицы из базы, как будто бы я еще не проводил ни одной миграции и у меня пустая база. Далее, в каждом тесте я выполняю миграции и работаю с базой. То есть я проверяю одновременно, что у меня работает и моя бизнес-логика, и репозитории (хранение).

Примерно так организованы юнит-тесты в php фреймворке Laravel. Я нахожу это удобным и хотел бы повторить. Проблема только в том, что я не нашел, как удалить абсолютно все таблицы из базы (включая таблицу списка миграций __EFMigrationsHistory). Все найденные мною способы основаны на перечислении существующих таблиц в прямом SQL запросе. Это создает ограничения: привязку к конкретной СУБД (диалект SQL) и привязку к конкретному количеству таблиц (если добавится еще одна, то придется править все тесты). Также я находил решения, где люди предлагают удалять сущности через api Entity. Но тогда останется __EFMigrationsHistory и в следующем тесте миграции не пройдут.

Было бы здорово, если было бы что-то типа

`context.DropAllTables()`

Заранее благодарен за любую помощь!

READ ALSO
c# Как сделать мультиязычное приложение?

c# Как сделать мультиязычное приложение?

Нужно сделать переключения языков на форме

185
MVVM узнать, какая кнопка нажата

MVVM узнать, какая кнопка нажата

Я создаю во вью ItemsControl, который содержит в себе структуру UniformGridItemTemplate у него - набор кнопок, которые генерируются на основе ObservableCollection (так...

198
Искажается изображение

Искажается изображение

Всем доброго времени сутокПодскажите пожалуйста, почему используя код приведенный ниже (Перерисовка изображений формата PCX в Png) некоторые...

110
Поменять Image.Source в WPF

Поменять Image.Source в WPF

Я делаю приложение с WPFВ форме есть кнопка для запуска exe файла, который меняет фотографию photo

108