Entity framework как удалить базу данных

Обновлено: 06.07.2024

У меня есть таблица SQL Server в Entity Framework с именем employ и одним ключевым столбцом с именем ID .

Как удалить одну запись из таблицы с помощью Entity Framework?

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

Нет необходимости сначала запрашивать объект, вы можете прикрепить его к контексту по его идентификатору. Подобный этому:

Кроме того, вы можете установить состояние вложенной записи как удаленное :

Вы можете использовать SingleOrDefault , чтобы получить один объект, соответствующий вашим критериям, а затем передать его методу Remove вашей таблицы EF.

Как удалить запись в таблице соединений в Entity Framework 5? При обратном проектировании моего DataContext Entity Framework, похоже, распознала мою таблицу соединений и автоматически добавила коллекции в мои модели, чтобы представить отношение M:M. Это здорово при добавлении элементов, так как я.

Я хочу проверить, является ли запись в таблице базы данных удаляемой или нет с помощью Entity Framework. Если первичный ключ записи используется в качестве внешнего ключа в разных таблицах, то эта запись не подлежит удалению. Я знаю, что могу запустить функцию Remove entity framework, чтобы.

Я использую entity framework с LINQ. Следующий код был полезен для меня;

1 - для нескольких записей

2 - для одиночной записи

Более общий подход

С Entity Framework 6 вы можете использовать Remove . Кроме того, это хорошая тактика-использовать using для того, чтобы быть уверенным, что ваше соединение закрыто.

Просто хотел внести свой вклад в три метода, с которыми я отскакивал назад и вперед.

Способ 1:

Способ 2:

Одна из причин , по которой я предпочитаю использовать Метод 2 , заключается в том, что в случае установки EF или EFCore на QueryTrackingBehavior.NoTracking это безопаснее.

Тогда есть метод 3:

Это использует подход мягкого удаления, устанавливая свойство DeletedOn записи и все еще имея возможность сохранить запись для будущего использования, что бы это ни было. В основном, положить его в корзину .

Кроме того, в отношении метода 3 вместо установки всей записи на изменение:

Вы также просто установите только столбец DeletedOn как измененный:

Для универсального DAO это сработало:

Вы можете сделать что-то подобное в своем событии click или celldoubleclick вашей сетки(если вы его использовали)

Затем сделайте что-то вроде этого в вашей кнопке удаления:

Кроме того, вы можете использовать запрос LINQ вместо запроса LINQ к сущностям:

employ.Id используется в качестве параметра фильтрации, который уже был передан из события CellDoubleClick вашего DataGridView.

вы можете сделать это просто так

вид, из которого вы его назовете

я надеюсь, что вам будет легко это понять

Что вы думаете об этом, просто или нет, вы также можете попробовать это:

Использование EntityFramework.Plus может быть одним из вариантов:

Более подробные примеры можно найти здесь

Вот безопасный способ:

Здесь вы можете накопить все изменения, которые вы хотите, так что вы можете сделать серию удалений перед SaveChanges и фиксацией(коммитом), так что они будут применены только в том случае, если все они будут успешными.

Лучший способ-проверить, а затем удалить

Похожие вопросы:

Я вызываю одну и ту же базу данных из разных приложений , используя Entity Framework. Однако, когда одно приложение читает / обновляет запись, я не хочу, чтобы другие приложения читали эти данные. Я.

У меня есть таблица с 3 столбцами: ID, Name, ParentID. Как я могу удалить конкретную запись со всеми ее дочерними элементами (N уровней глубиной)? Использование Entity Framework 3.5.

Есть ли способ заставить Entity Framework читать одну запись из БД за раз? В основном, чтобы заставить его работать как SqlDataReader (мне нужно только читать вперед, и я вообще не буду изменять.

У меня есть таблица в базе данных, которая имеет несколько столбцов. Я получаю список некоторых записей из этой таблицы в моем классе репозитория. Так что у меня будет что-то вроде этого: Теперь я.

Как удалить запись в таблице соединений в Entity Framework 5? При обратном проектировании моего DataContext Entity Framework, похоже, распознала мою таблицу соединений и автоматически добавила.

Я хочу проверить, является ли запись в таблице базы данных удаляемой или нет с помощью Entity Framework. Если первичный ключ записи используется в качестве внешнего ключа в разных таблицах, то эта.

У меня есть одна таблица с именем A, которая является мастером, другая таблица с именем B-это деталь В А и б у меня есть следующие записи: Стол: Id Name Family ------------------------- 1 Ebrahim.

У меня есть две таблицы, связанные как отношения many-to-many в EF. Предположим, что у меня есть таблица Person & Groups. Чего я хочу добиться, так это удалить только одну группу из указанного.

Я сохраняю запись в своей базе данных, передавая 3 параметра, параметр number передается для выбора количества записей из одной таблицы в другую. Однако записанный цикл вставляет только 1 запись.

Я использую EF Code First с EF 5 в VS 2012. Я использую команду PM update-database , и у меня есть простой метод заполнения для заполнения некоторых таблиц образцами данных.

Я хочу удалить и заново создать свой x.mdb. Похоже, что история обновлений не синхронизирована. Если я закомментирую все свои DBSet в моем контексте, update-database работает без ошибок, но оставляет некоторые таблицы в БД. Поскольку у меня нет ценных данных в БД, проще всего сбросить все настройки.

Как я могу этого добиться?

Если я правильно понимаю .

Если вы хотите start clean :

1) Удалите базу данных вручную - где бы она ни находилась (я предполагаю, что ваше соединение отсортировано), или очистите ее, но проще / безопаснее удалить все вместе - так как есть system __MigrationHistory таблица - ее тоже нужно удалить.

2) Удалите все migration files - которые находятся под Migrations - с номерами и т. Д. - удалите их все,

3) Перестройте свой проект , содержащий миграции (и остальные), и убедитесь, что ваш проект настроен (конфигурация) для автоматической сборки (что иногда может вызывать проблемы, но вряд ли для вас),

4) Снова запустите Add-Migration Initial - затем Update-Database

Поскольку однажды на этот вопрос будут нажимать новые пользователи EF Core, и я считаю, что основные ответы несколько излишне деструктивны, я покажу вам способ начать «заново». Остерегайтесь, это удалит все ваши данные.

  1. Удалите все таблицы на вашем сервере MS SQL. Также удалите таблицу __EFMigrations.
  2. Тип dotnet ef database update
  3. EF Core теперь воссоздает базу данных с нуля до последней миграции.

Он удаляет последнюю миграцию (должна быть единственной), создает ее снова, а затем обновляет базу данных. Таким образом, вы можете ввести эти три команды в одну строку в Package Management Console после редактирования вашего DbContext , и он обновит InitialMigration и базу данных.

Немного раздражает то, что он скомпилирует ваш проект три раза подряд, но, по крайней мере, никаких дополнительных ручных действий (например, удаления файлов миграции) не требуется.

Когда вы удаляете объект, вам нужно будет выдать Remove-Database перед обновлением. Итак, строка становится:

Проблема здесь: вам нужно подтвердить удаление базы данных + 4 перестроения.

Сделайте следующие шаги:

  1. Удалите те объекты, которые нужно удалить из контекста // Dbset<Item> Items и в консоли Nuget запустите эти команды
  2. добавление миграции [contextName]
  3. обновление базы данных -verbose

Он удалит таблицы, которые не существуют в контексте, но уже созданы в базе данных.

Есть много способов удалить базу данных или обновить существующую, просто вы можете переключиться на предыдущие миграции.

Но у некоторых баз данных есть ограничения, такие как запрет на изменение после создания отношений, что означает, что вы не разрешаете привилегиям удалять столбцы от поставщиков баз данных ef core, но большую часть времени в базе данных core drop ef разрешено. Поэтому вы можете удалить базу данных с помощью команды drop, а затем вы снова используете предыдущую миграцию.


ChangeTracker и состояние объекта в Entity Framework Core

Прежде чем мы начнем изменять данные с помощью Entity Framework Core, мы должны ознакомиться с некоторыми дополнительными функциями EF Core.

Как мы узнали, в первой части серии, DbContext состоит всего из трех свойств: ChangeTracker , Database и Model . Мы видели свойства модели и базы данных в действии в предыдущих статьях, поэтому в этой статье мы поговорим о свойствах ChangeTracker и State .

Свойство ChangeTracker обеспечивает доступ к информации отслеживания изменений и операциям с загруженной в данный момент сущностью. Эта возможность очень важна, когда мы хотим выполнить любую операцию модификации базы данных. EF Core имеет такую ​​информацию (об отслеживании и операциях) независимо от того, создаем ли мы ее, изменяем или удаляем сущность.

Кроме того, EF Core не будет выполнять никаких операций, пока мы не вызовем метод SaveChanges . Поэтому знание того, какую операцию мы хотим выполнить, имеет решающее значение для EF Core до вызова метода SaveChanges .

Каждой отслеживаемой сущности присвоено свойство State. Когда мы используем объект контекста для загрузки сущности без метода AsNoTracking или меняем ее состояние с помощью методов Update, Remove или Add, эта сущность будет отслеживаемой сущностью. Значение свойства State можно получить с помощью команды _context.Entry(our_entity).State .

Вот возможные состояния отслеживаемых объектов:

  • Detached - объект не отслеживается, и вызов метода SaveChanges не даст никакого эффекта.
  • Unchanged - объект загружен из базы данных, но не имеет изменений. Метод SaveChanges игнорирует его.
  • Added - объект не существует в базе данных, и вызов метода SaveChanges добавит его в базу данных.
  • Modified - объект существует в базе данных и был изменен, поэтому вызов метода SaveChanges изменит его в базе данных.
  • Deleted - объект существует в базе данных, и как только мы вызовем метод SaveChanges, он будет удален из базы данных.

Теперь, когда мы все это знаем, мы можем перейти к операциям Create , Update и Delete .

Добавление данных с помощью методов Add и AddRange

Мы можем создавать новые строки в базе данных с помощью методов Add и AddRange. Метод Add изменяет состояние отдельной сущности, где AddRange может делать то же самое, но для нескольких сущностей. Давайте посмотрим, как работает метод Add после того, как мы отправим объект student из Postman:

После этих проверок мы вызываем метод Add , чтобы изменить состояние объекта на «Добавлено», и вызываем метод SaveChanges для создания новой строки в базе данных. Последняя строка кода вернет созданную сущность (с ее идентификатором) клиенту:


Это результат в базе данных:


Отслеживание изменений при добавлении объекта

Если мы немного изменим наш код, мы сможем проверить, как изменяется состояние объекта во время этого действия. Конечно, для сохранения объекта в базе данных дополнительный код не требуется, он здесь только в учебных целях:


Как мы видим, перед добавлением нашей сущности в базу данных она находится в состоянии Detached . Как только мы используем метод Add , он принимает состояние Added . Наконец, после метода SaveChanges он имеет состояние Unchanges .

Использование метода AddRange

Когда мы хотим добавить несколько строк в базу данных, мы используем метод AddRange . Это та же процедура, только другой метод:

Еще одна важная вещь, о которой следует упомянуть, заключается в том, что метод SaveChanges выполняет требуемую операцию, но также возвращает количество затронутых строк. Поэтому, если нам нужно проверить, сколько строк затронуто нашей операцией, мы всегда можем вернуть результат метода SaveChanges:

Добавление связанных объектов в базу данных

Теперь мы собираемся узнать, как включать отношения при добавлении основной сущности в базу данных. Чтобы продемонстрировать это, мы собираемся немного изменить наш первый пример:

Как видно из приведенного выше кода, мы только добавляем объект student к объекту контекста приложения, но объект studentDetails также добавляется в базу данных:


И мы можем проверить ответ от приложения:


Важно отметить, что мы не добавляем значение Id вручную для какой-либо сущности, за это отвечает EF Core. В базе данных видно, что значения GUID были созданы.

Отлично. То же самое можно сделать с отношениями "один ко многим" или "многие ко многим".

Обновление строк в базе данных

Есть два способа обновить строки в базе данных. С подключенным обновлением и с отключенным обновлением. Разница в том, что с подключенным обновлением мы используем один и тот же объект контекста для загрузки и изменения сущности. При отключенном обновлении дело обстоит иначе. Либо мы используем разные объекты контекста, либо получаем объект от клиента, который имеет все свойства как сущность в базе данных, поэтому мы можем обновить его без предварительной загрузки действия.

При работе с подключенным обновлением необходимо выполнить три основных шага:

  • Чтение данных из базы данных (с ее связями или без них).
  • Изменить одно или несколько свойств.
  • Вызов метода SaveChanges.

Итак, давайте посмотрим на связанное обновление в действии, когда мы отправим объект student от клиента с обновленным свойством Name :

Мы видим все три шага в приведенном выше коде. Мы загружаем объект студента на основе его идентификатора, затем сопоставляем свойства из обновленного студента клиента, который устанавливает состояние объекта на Modified и, наконец, мы вызываем SaveChanges . Несмотря на то, что мы изменили только свойство Name , мы должны сопоставить все свойства, потому что мы не знаем, что именно было изменено на стороне клиента.

EF Core, с другой стороны, содержит информацию о том, что именно было изменено.

Когда мы загружаем нашу сущность, EF Core начинает отслеживать ее, и в этот момент состояние становится Unchanged . Как только мы изменяем какое-либо свойство загруженного объекта, оно изменяет State на Modified . Наконец, после метода SaveChanges состояние возвращается к Unchanges .

Как только мы отправим запрос на это действие PUT, имя учащегося будет обновлено:


Мы видим, что обновлено только свойство Name. Если вы не видите обе команды в окне консоли, вы наверняка можете найти их в окне вывода в Visual Studio.

Свойство IsModified

Когда у нас есть сущность, которая уже находится в состоянии Modified , EF Core использует другое свойство, которое предоставляет информацию о том, что действительно изменилось. Это свойство IsModified , и мы можем изучить, как оно работает, немного изменив наш код:


Результат здесь не требует пояснений.

Обновление отношений в EF Core

Добавить отношения к операциям обновления в EF Core довольно просто. Мы можем прикрепить реляционную сущность к основной сущности, изменить ее, а все остальное EF Core сделает за нас, как только мы вызовем метод SaveChanges . Процедура такая же, как и для действий create.

Когда мы отправляем нашу форму запроса Postman, мы собираемся обновить сущность student и сущность studentDetails :


Тот же процесс применяется к другим типам отношений.

Важно знать, что когда мы обновляем нашу основную сущность, добавляя новую сущность отношения, EF Core создаст новую строку в таблице отношений и соединит ее с основной сущностью с помощью внешнего ключа:


Поскольку теперь мы знаем, как обновлять отношения в EF Core, мы можем перейти к отключенному обновлению.

Неотслеживаемое обновление в EF Core

Есть несколько способов выполнить неотслеживаемое обновление, и мы собираемся показать вам два способа сделать это. В первом примере мы собираемся прикрепить объект, отправленный от клиента, изменить его состояние, а затем сохранить его в базе данных:

Объект student , отправленный от клиента, имеет в начале состояние Detached . После того, как мы воспользуемся методом Attach , объект изменит состояние на Unchanged .

Это также означает, что с этого момента EF Core начинает отслеживать объект. Теперь мы собираемся изменить состояние на Modified и сохранить его в базе данных.

Это объект, отправленный клиентом:

Как видите, у него также есть свойство Id . Кроме того, мы изменили свойства Name и IsRegularStudent , но EF Core обновит весь объект в базе данных.

Другой способ сделать то же самое - использовать метод Update или UpdateRange , если у нас есть несколько объектов, готовых к обновлению. Итак, давайте отправим тот же объект только с измененным свойством IsRegularStudent на true:

Мы видим разницу. Метод Update установит отслеживаемую сущность, а также изменит ее состояние с Detached на Modified . Таким образом, нам не нужно прикреплять сущность и явно изменять ее состояние, потому что это делает за нас метод Update . Этот подход также обновит весь объект, даже если мы изменили только одно свойство:


Теперь мы знаем, как выполнить отключенное обновление и в чем отличие от подключенного обновления.

Операция удаления в EF Core

У нас есть два способа удаления строк, и мы рассмотрим их оба.

Soft Delete в Entity Framework Core

При использовании метода мягкого удаления объект скрывается, а не удаляется. Это не необычный способ выполнения действий удаления, потому что во многих реальных проектах мы не хотим действительно удалять какие-либо строки, потому что они потребуются для некоторой статистики позже.

По сути, мы не удаляем объект, мы обновляем его, изменяя его свойство (мы собираемся назвать его "Удаленным") на true.

Чтобы показать, как работает мягкое удаление, нам нужно внести некоторые изменения в нашу текущую модель базы данных. Для начала изменим модель Student , добавив дополнительное свойство:

Теперь давайте изменим класс StudentConfiguration , добавив дополнительный метод для фильтрации всех удаленных учащихся из запросов:

Метод HasQueryFilter будет включать только те сущности Student , для свойства Deleted которых установлено значение false. Или, другими словами, он проигнорирует всех учащихся, для которых для параметра Deleted установлено значение true.

Чтобы применить эти изменения к базе данных, мы собираемся создать и применить миграцию:

После этого переноса для всех строк в таблице Student столбец Deleted будет иметь нулевое значение (false).

Чтобы продолжить, давайте создадим дополнительное действие "Удалить" в контроллере и отправим запрос на удаление:

Мягкое удаление состоит из трех этапов:

  • Загрузка
  • Редактирование
  • Удаление

Это результат в базе данных:


Загрузка данных с использованием QueryFilter и игнорирование QueryFilter

С помощью метода HasQueryFilter мы убедились, что «удаленные» объекты не будут включены в результат запроса. Посмотрим, работает ли это:

EF Core обычно возвращает всех студентов из таблицы Student. Но с реализованным методом HasQueryFilter результат другой:


Мы можем подтвердить, что «Student updated 3» отсутствует, поскольку это единственное свойство, у которого для свойства Deleted установлено значение true.

Конечно, если мы хотим игнорировать наш фильтр запроса, мы можем сделать это, применив к запросу IgnoreQueryFilter :

Этот запрос будет включать «удаленную» сущность:


Отличная работа. Давайте продолжим обычное удаление.

Удаление отдельной сущности с помощью EF Core

При обычном удалении мы не изменяем нашу сущность, а фактически удаляем ее из базы данных с помощью метода Remove или RemoveRange для нескольких сущностей:

Это действие также выполняется в три этапа:

  • Загрузка объекта "Student" и установка его состояния на "Без изменений".
  • Использование метода Remove для установки состояния "Удалено".
  • Сохранение изменений в базе данных

Мы должны быть осторожны с действиями удаления, если у нашей сущности есть связи, и мы не указали их в действии удаления. Удаление основного объекта может привести к удалению и взаимосвязей (каскадное удаление), в зависимости от конфигурации объекта.

Это переведенная команда SQL:


Мы видим, что первая инструкция Select включает фильтр запроса. Сразу после фильтра идет наш запрос на удаление.

Удаление объекта вместе со связанными данными

Чтобы удалить объект с его отношениями, все, что нам нужно сделать, это включить эту связь в основную сущность:

И это все, что нам нужно сделать. Остальное EF Core сделает за нас.

Заключение

Мы надеемся, что вам понравилось это читать и вы нашли много полезной информации.

Я пытался откатиться до предыдущей миграции и удалить файл с ошибочной миграцией. Но затем, когда я пытаюсь добавить новую миграцию, я получаю ошибку при обновлении базы данных, потому что файл миграции поврежден (точнее, первая строка кода переименовывает таблицу A в B и является следующей строкой, EF пытается обновить таблицу с помощью имя А - возможно, это какая-то ошибка EF).

Могу ли я выполнить какой-нибудь запрос, который скажет EF что-то вроде «Забудьте последнюю миграцию, как будто ее никогда не было, это было плохо»? Что-то вроде Remove-Migration.

Edit1 Я нашел решение, подходящее для меня. Меняем модель до хорошего состояния и запуска Add-Migration TheBadMigration -Force . Это перенастроит последнюю, не примененную миграцию.

Во всяком случае, это все еще не полностью отвечает на первоначальный вопрос. Если я обновлю базу данных до плохой миграции, я не нашел хорошего способа откатить и создать новую миграцию, кроме плохой.

Мне пришлось перезапустить визуальную студию, и тогда она начала работать правильно. Это уже случалось со мной пару раз, всегда после того, как мы возились с миграциями, фактически не обновляя базу данных, поэтому с инструментарием там происходит что-то странное.

У вас есть 2 варианта:

Вы можете взять Даун из неудачной миграции и поместить его в новую миграцию (вам также необходимо будет внести последующие изменения в модель). Это эффективно сворачивается к лучшей версии.

Я использую эту опцию для вещей, которые были в нескольких средах.

Другой вариант - запустить Update-Database –TargetMigration: TheLastGoodMigration вашу развернутую базу данных, а затем удалить миграцию из вашего решения. Это своего рода альтернатива hulk smash и требует, чтобы это выполнялось для любой базы данных, развернутой с неверной версией.

Примечание: чтобы переназначить миграцию, которую вы можете использовать Add-Migration [existingname] -Force . Это, однако, перезапишет существующую миграцию, поэтому обязательно делайте это, только если вы удалили существующую миграцию из базы данных. Это делает то же самое, что удаление существующего файла миграции и запуск add-migration

Я использую эту опцию при разработке.

Опция «Халк разбить» не работает. Я еще не применил плохую миграцию к базе данных. Я пытался, но это не работало, потому что имена таблиц, которые я указал в оригинальном вопросе. Первый вариант мне не очень нравится, потому что, похоже, мне придется изменить код миграции. Если я сделаю это плохо, я могу все сломать. «Халк разгром» - это ответ, он работает для меня при разработке, и я хочу добавить что-то к пропущенной миграции. Я думаю, что причины, по которым он не работал для Мартина, не связаны (или, возможно, связаны с изменением схемы базы данных вручную) HULK SMASH . --- Я пытался быть хорошим, но EF не играл - я вернулся к последнему известному - (резервные копии файлов миграции) удален, добавлен перенос - принудительно - переименован в предыдущий и скопирован код. Затем добавлена ​​база данных обновлений вторая миграция точно так же - без ошибок - вернуться к нормальной жизни

Как показывает вопрос, это относится к миграции в среде типа разработки, которая еще не была выпущена.

Эта проблема может быть решена с помощью следующих шагов: восстановить вашу базу данных до последней удачной миграции, удалить неудачную миграцию из вашего проекта Entity Framework, сгенерировать новую миграцию и применить ее к базе данных. Примечание: Судя по комментариям, эти точные команды могут больше не применяться, если вы используете EF Core.

Шаг 1. Восстановите предыдущую миграцию

Если вы еще не применили свою миграцию, вы можете пропустить эту часть. Чтобы восстановить схему базы данных до предыдущей точки, введите команду Update-Database с параметром -TargetMigration, чтобы указать последний удачный перенос. Если код вашей сущностной структуры находится в другом проекте в вашем решении, вам может потребоваться использовать параметр «-Project» или переключить проект по умолчанию в консоли диспетчера пакетов.

Чтобы получить имя последней удачной миграции, используйте команду «Get-Migrations», чтобы получить список имен миграции, которые были применены к вашей базе данных.

Этот список сначала показывает самые последние примененные миграции. Выберите миграцию, которая происходит в списке после того, на который вы хотите понизить рейтинг, то есть тот, который применен перед тем, на который вы хотите понизить рейтинг. Теперь выполните обновление базы данных.

Все миграции, примененные после указанного, будут понижены в порядке, начиная с самой последней, примененной первой.

Шаг 2: Удалить вашу миграцию из проекта

Если remove-migration команда недоступна в вашей версии Entity Framework, удалите файлы нежелательной миграции в папку «Миграции» проекта EF вручную. На этом этапе вы можете создать новую миграцию и применить ее к базе данных.

имея этот простой код, я получаю "не могу удалить базу данных "test_db", потому что она в настоящее время используется" (метод очистки), когда я ее запускаю.

DataContext имеет одно свойство, как это

Как заставить мой код удалить базу данных? Спасибо

проблема в том, что ваше приложение, вероятно, все еще имеет некоторое соединение с базой данных (или другое приложение также имеет соединение). База данных не может быть удалена при наличии любого другого открытого соединения. Первая проблема, вероятно, может быть решена путем отключения пула соединений (add Pooling=false в строку подключения) или очистить пул перед удалением базы данных (путем вызова SqlConnection.ClearAllPools() ).

обе проблемы могут быть решены путем принудительного удаления базы данных, но для этого вам нужен пользовательский инициализатор базы данных, где вы переключаете базу данных в однопользовательский режим и после этого удаляете ее. здесь это какой-то пример, как этого добиться.

Я сходил с ума от этого! У меня есть открытое соединение с базой данных внутри SQL Server Management Studio (SSMS) и табличный запрос, открытый для просмотра результатов некоторых модульных тестов. При повторном запуске тестов внутри Visual Studio я хочу, чтобы он drop база данных ДАЖЕ ЕСЛИ соединение открыто в SSMS.

вот окончательный способ избавиться от Cannot drop database because it is currently in use :

Инициализация Базы Данных Entity Framework

фокус в том, чтобы переопределить InitializeDatabase метод внутри custom Initializer .

скопировал соответствующую часть здесь ради good дублирование. :)

если база данных уже существует, вы можете наткнуться на случай наличия ошибка. Исключение " не удается удалить базу данных, потому что она в настоящее время в использовании " может поднять. Эта проблема возникает при активном подключении остается подключенным к базе данных, это в процессе удаленный. Хитрость заключается в переопределите метод InitializeDatabase и измените базу данных. Это говорит базе данных, чтобы закрыть все соединения и если транзакция открыта для отката этого.

Читайте также: