For EF6, I can check whether a database exists in the following way:
context.Database.Exists()
How can I do this in EF Core?
For EF6, I can check whether a database exists in the following way:
context.Database.Exists()
How can I do this in EF Core?
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()
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.
Entity Framework Core 6.0.7:
dbContext.GetService<IDatabaseCreator>().CanConnect();
works for NpgsqlDatabaseConnector - the Npgsql.EntityFrameworkCore.PostgreSQL 6.0.5 provider and probably for all RelationalDatabaseCreator
descendants since it tests if database really exists as the default/base implmentation.