Подтвердить что ты не робот

Entity Framework Core - Как проверить, существует ли база данных?

Для EF6 я могу проверить, существует ли база данных следующим образом:

context.Database.Exists()

Как я могу сделать это в EF Core?

4b9b3361

Ответ 1

Я нашел решение самостоятельно:

(context.GetService<IDatabaseCreator>() as RelationalDatabaseCreator).Exists()

Работает для EF 7.0.0-rc1-final для SqlServer

UPDATE:

Entity Framework Core 2.0:

(context.Database.GetService<IDatabaseCreator>() as RelationalDatabaseCreator).Exists()

Ответ 2

Если вы проверяете, существует ли это для определения необходимости создания, вы можете использовать это:

context.Database.EnsureCreated();

Ответ 3

Возможно, слишком поздно, но как насчет context.Database.EnsureCreated()?

Подсказка, указывающая в редакторе VS на EnsureCreated(), гласит:

Ensures that the database for the context exists. If it exists, no action is taken...

Также обратите внимание, что метод возвращает true, если база данных не существует, в противном случае - false. Кроме того, версия EF Core, которую я проверил, - 2.2.6. Для более новых версий вам может потребоваться проверить еще раз.

НТН

NB. Если вы полагаетесь на миграции, вам следует избегать этого подхода, поскольку при создании БД миграции не применяются. Для получения дополнительной информации вам может понадобиться прочитать это: fooobar.com/info/295797/....

NB (еще раз): Если вам нужно применить миграцию, вам может потребоваться обратить внимание на context.Database.CanConnect(). Если тест не пройден (предполагается, что нет причин, кроме существования БД), вы можете вызвать context.Database.Migrate(), который применяет миграцию.