Entity Framework Core - How to check if database exists?

The other solutions tell you whether the database is connectable:

context.Database.GetService<IRelationalDatabaseCreator>().Exists();  //true
context.Database.EnsureDeleted();
context.Database.GetService<IRelationalDatabaseCreator>().Exists();  //true

I want to know whether the database exists:

context.Database.GetService<IRelationalDatabaseCreator>().HasTables();  //true
context.Database.EnsureDeleted();
context.Database.GetService<IRelationalDatabaseCreator>().HasTables();  //false

Note this weird behavior:

context.Database.EnsureDeleted();
context.Database.GetService<IRelationalDatabaseCreator>().HasTables();  //false
context.Database.EnsureCreated();
context.Database.GetService<IRelationalDatabaseCreator>().HasTables();  //true
context.Database.EnsureDeleted();
context.Database.GetService<IRelationalDatabaseCreator>().HasTables();  //true !!

So it's not perfect, but depending on your use case it could be useful.


I have found the solution on my own:

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

It works for EF 7.0.0-rc1-final version for SqlServer

UPDATE:

Entity Framework Core 2.0:

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

UPDATE .Net Core 3.1

To check if a database exists and can be contacted:

dbContext.Database.CanConnect()